oop — Почему конструкторы PHP не возвращают пригодный для использования объект?

Я продолжаю натыкаться на эту причуду PHP и не могу объяснить, почему это происходит.

Почему это

new MyClass()->doSomething();

Вызвать ошибку, пока

(new MyClass())->doSomething();

а также

$myObject = new MyClass();
$myObject->doSomething();

работать как положено?

Есть ли веская причина для необходимости скобки вокруг конструктора?

я нашел этот RFC объясняя, что это был осознанный выбор, но я все еще не могу понять причину этого.

0

Решение

MyClass() может быть вызовом функции, которая возвращает объект, doSomething Метод возвращает строку, которая ссылается на класс, который вы затем пытаетесь создать newт.е.

$className = MyClass()->doSomething();
new $className;

Добавленный () предназначены для синтаксической неоднозначности.

1

Другие решения

Кажется, просто дизайнерское решение: https://wiki.php.net/rfc/instance-method-call

Более того, хорошо работает с цепочкой вызовов функций (https://wiki.php.net/rfc/fcallfcall) и разыменование

Здесь полное обсуждение PHP Internals ML:
https://www.mail-archive.com/internals@lists.php.net/msg48787.html

2

new MyClass

возвращает указатель на объект MyClass, тогда вы можете получить доступ к своему методу, как это

(new MyClass())->func();

из-за указателя

Вот

new MyClass()->func();

вы не получаете доступ к указателю, а затем не можете использовать свою функцию, и поэтому вы получаете сообщение об ошибке

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector