PHP позволяет создавать экземпляр объекта из переменной, подобной этой:
$a = 'Foo';
$b = new $class;
Поэтому, когда вы используете new $var
, PHP проверяет, является ли это строка для создания нового экземпляра класса, и если это объект, он собирается извлечь имя класса экземпляра объекта и создать новый экземпляр. из него.
Если вы попытаетесь сделать то же самое с переменной не-строки или не-объекта:
$a = 1;
$b = new $a;
Это приведет к ошибке:
Ошибка PHP: имя класса должно быть допустимым объектом или строкой
В PHP 5.3.0 введено несколько новых способов создания экземпляров объекта, что является примером сценария, подобного предоставленному вами:
class Test {}
$obj1 = new Test();
$obj2 = new $obj1;
Для получения дополнительной информации: Прочитайте Пример # 5 Создание новых объектов в https://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.new