Идиома обычно используется в объектно-ориентированных языков, таких как Python и Ruby, является создание экземпляра объекта и цепочки методы, которые возвращают ссылку на сам объект, такие как:"Inline" Класс Instantiation в PHP? (Для простоты метода Chaining)
s = User.new.login.get_db_data.get_session_data
В PHP, его можно повторить такое поведение, как так:
$u = new User();
$s = $u->login()->get_db_data()->get_session_data();
Попытка следующие результаты в syntax error, unexpected T_OBJECT_OPERATOR
:
$s = new User()->login()->get_db_data()->get_session_data();
Кажется, что это может быть выполнено с использованием статических методов, что, вероятно, я и сделаю, но я хотел проверить lazyweb: Есть ли на самом деле простой и простой способ создания PHP-классов «inline» (как показано на рисунке в приведенном выше фрагменте) для этой цели?
Если я решаю использовать статические методы, слишком чародействует, чтобы статический метод класса возвращал экземпляр самого класса? (Эффективно написав мой собственный конструктор - это -не-т-а-конструктор?) Он чувствует себя грязным, но если не слишком много страшных побочных эффектов, я могу просто сделать это.
Я предполагаю, что я мог бы предварительно создать экземпляр UserFactory с помощью метода get_user(), но мне интересно, какие решения я попросил выше.
С PHP 5.4 следующие работы: `(new User()) -> login() -> ...`, см. [PHP changelog] (http://php.net/ChangeLog-5.php) для 5.4 .0 * "Добавлен доступ к члену класса при создании экземпляра (например, (new foo) -> bar()) поддержка "* – hakre 2012-11-01 20:44:47