Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rzutowanie obiektow
Forum PHP.pl > Forum > PHP
Teamon
Jest sobie klasa A, ktorej bardzo nie chcialbym zmieniac.
Stworzylem klase B extends A.
Problem w tym, jak zrobic zeby to dzialalo:
Kod
$a = new A();
$b = (B)$a;


?

(Aha, jakby to cos dalo albo da sie to zrobic inaczej to chodzi mi o dodanie metody do klasy sfGuardUser, a rzutowanie jest potrzebne dlatego ze sfGuardUserPear::retrieveByUsername() zwraca obiekt typu sfGuardUser. Chodzi oczywiscie o Symfony)
rolnix
http://pl.php.net/manual/pl/language.oop5.overloading.php

A przypadkiem nie zadziała $b = new B(); $b = $a; ?
Teamon
W tym linku nie ma nic o rzutowaniu. Do tego (ci co sie bawia Symofny to beda wiedziec o co chodzi) w BasesfGuardUserPeer wszystko odwoluje sie poprzez sfGuardUserPeer:: zamiast przez self:: (aby mozna bylo to nadpisac) ale to powoduje ze w klasie dziedziczacej po sfGuardUserPeer za duzo nie zmienie (musialbym przepisac wielszosc z BasesfGuarduserPeer). Zdecydowalem sie na nadpisanie w sfGuardUserPeer
Kod
const CLASS_DEFAULT = 'lib.model.User';



A to co podales nie dziala ($b staje sie obiektem A)
dr_bonzo
Nie ma rzutowania w php. Po prostu uzywasz metod z klasy ktorej instacja jest ten obiekt.

  1. <?php
  2. $a = new A();
  3. $b = (B)$a;
  4. ?>


Po zatym takie cos nie przejdzie bo $a jest instacja klasy A, a nie B.
Nie zmienisz typu obiektu (z A na cool.gif, mozesz tylko zmienic typ referencji do tego obiektu (z A do cool.gif dzieki czemu bedziesz mial (gdyby to byla java/c++) dostep do metod klasy B, spod tej referencji.

Sens ma dopiero takie cos

Kod
//java
A a = new B();
B b = (B)a;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.