PHP: оператор new для экземпляра объекта создает экземпляр объекта. Зачем? - PullRequest
3 голосов
/ 26 июня 2019

По какой причине следующий код работает и генерирует данный результат. Это специальная языковая конструкция, которая только что поддерживается PHP? Если так, то какой? Или это просто простой php-ism?

class Foo {};

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

var_dump($a); // class Foo#1 (0)
var_dump($b); // class Foo#2 (0)

1 Ответ

0 голосов
/ 26 июня 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...