Преимущества цепочки методов PHP?

Этот вопрос все еще находится на учебных колесах PHP-OOP, возможно, он принадлежит failblog.org. знак равно

Каковы преимущества цепочки методов в PHP?

Я не уверен, что это важно, но я буду вызывать свой метод статически. например

$foo = Bar::get('sysop')->set('admin')->render();

Из того, что я читал, любой метод, который возвращает $this, может быть связан. Я только что узнал, что это новое в PHP5. Мне кажется, что могут быть преимущества в скорости, если мне не нужно создавать экземпляр совершенно нового объекта (вызывая его статически) и просто выбирать несколько методов, которые мне нужны, из класса?

Имею ли я это право?


person Jeff    schedule 29.12.2009    source источник
comment
Это называется свободный интерфейс, он не нов, просто очевидно, что он не работал до PHP5 devzone.zend.com /статья/1362   -  person CaffGeek    schedule 29.12.2009
comment
Это работает сейчас? Прекрасный! Не знал этого.   -  person Pekka    schedule 29.12.2009


Ответы (3)


Использование любого из подходов не дает значительных преимуществ в производительности, особенно на рабочем сервере с кэшем байт-кода.

Цепочка методов — это просто более короткий способ написания вещей. Сравните с более длинной версией:

$foo = Bar::get('sysop');
$foo -> set('admin');
$foo -> render();

Однако у него есть некоторые особенности: обычная IDE (например, Eclipse) может автоматически дополнять ваш код в более длинной версии (при условии, что тип $foo известен), но для работы вам необходимо документировать возвращаемый тип всех методов. в короткой версии.

person Victor Nicollet    schedule 29.12.2009
comment
я сделал несколько тестов на нем, возвращая $this вместо возврата void, похоже, он использует примерно на 17 наносекунд медленнее на моем i7-6700 в режиме энергосбережения от батареи на ноутбуке с PHP 7.1.16, код теста можно найти здесь: github.com/Znote/POTCP/commit/ - person hanshenrik; 20.04.2019

Он по-прежнему создает экземпляр объекта; он просто никогда не присваивается переменной. По сути, вы просто вызываете методы анонимного объекта.

Я думаю, что любая экономия циклов будет незначительной, но я думаю, что неназначенные объекты будут освобождены сразу после этой строки кода, поэтому у вас может быть некоторая экономия памяти (вы можете добиться того же, установив для назначенных объектов значение null, когда вы закончите с их).

Основная причина, по которой люди используют цепочку методов, — это удобство; вы делаете много в одной строке кода. Лично я думаю, что это грязно и неуправляемо.

person Lucas Oman    schedule 29.12.2009

если мне не нужно создавать экземпляр целого нового объекта (вызывая его статически) и просто выбирать несколько методов, которые мне нужны, из класса?

Неправильный! Чтобы вернуть $this, необходимо создать экземпляр класса.

person AntonioCS    schedule 29.12.2009