2017-01-13 3 views
5

Я смотрел на OOP Basics и увидел такой код (упрощенно это немного)Как заново создана уже сделал объект (пример)

Вы можете увидеть этот класс и выход

class Test{} 

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

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

Что я не понимаю, это $b = new $a, но $a - это уже объект, так как/почему это работает? Если я vardump $a выход:

object(Test)#1 (0) { 
} 

Итак, как эта переменная работа с new ключевого слова. Я думал, что мы могли бы использовать только new с классом, который определен уже, или строкой, которая указывает на класс ех:

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

, но в этом случае, $var является строкой, а не другой объект.

+1

Я вижу это в первый раз! очень интересно! –

+1

PHP достаточно умен, чтобы понять, что, поскольку вы делаете 'new $ a', а as $ a - это объект, а не строка, он будет использовать это имя класса объекта для создания экземпляра нового объекта. –

+0

@ RyanVincent Просто curios, если объект отличается, то почему у них одинаковые хэш-символы? – samayo

ответ

1

Это ярлык для создания нового объекта. До PHP 5.3.0 вы должны сделать это:

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

С PHP 5.3.0 вы можете сделать то же самое с этим:

$newInstance = new $instance; 

Очень полезно, на мой взгляд, потому, что устраняет потребность в временной переменной.

Чтобы уточнить, это создает новый объект. Это не клонирование. Иными словами, вместо __clone() будет называться __construct().

Смежные вопросы