2017-01-13 11 views
5

Szukałem na OOP Basics i zobaczyłem kod tak (uproszczony mu bit)Jak działa już wykonany przedmiot zostać utworzony ponownie (patrz przykład)

widać to klasę i wyjście

class Test{} 

$a = new Test(); 
$b = new $a; 

var_dump($b == $a); // true 

To, czego nie rozumiem, to $b = new $a, ale $a jest już przedmiotem, więc jak/dlaczego to działa? Jeśli robię vardump $a wyjście jest:

object(Test)#1 (0) { 
} 

Tak, jak można, że ​​zmienna praca z new hasła. Myślałam, że używamy tylko new z klasą, który jest już zdefiniowany, lub sznurkiem, który wskazuje na klasy Ex:

$var = 'Test'; 
new $var; // ok 

ale w tym przypadku, $var jest ciągiem znaków, a nie inny przedmiot.

+1

Widzę to za pierwszym razem! bardzo interesujące! –

+1

PHP jest na tyle sprytny, aby zrozumieć, że ponieważ robisz 'new $ a', a jako $ a jest obiektem, a nie łańcuchem, użyje tej nazwy klasy obiektu do utworzenia instancji nowego obiektu. –

+0

@RyanVincent Po prostu ciekawostki, jeśli obiekt jest inny, dlaczego mają te same symbole mieszania? – samayo

Odpowiedz

1

Jest to skrót do tworzenia nowego obiektu. Przed PHP 5.3.0, co musisz zrobić to:

$class = get_class($instance); 
$newInstance = new $class; 

Począwszy od PHP 5.3.0 można zrobić to samo z tym:

$newInstance = new $instance; 

Bardzo przydatne, moim zdaniem, ponieważ eliminuje potrzeba zmiennej tymczasowej.

To wyjaśnia, że ​​tworzy nowy obiekt. To nie jest klonowanie. Innymi słowy, __construct() zostanie wywołany zamiast __clone().

Powiązane problemy