Вызывает ли использование цепочки методов в PHP проблемы с ресурсами или памятью? - PullRequest
2 голосов
/ 09 февраля 2012

Я говорю о таких методах:

    $object->method()->method1('param')->method2('param');

Они создаются путем возврата объекта в функцию.

    return $this;

Я видел использование стороннего программного обеспеченияэтот метод, но мне интересно, не вызовет ли это небольшую проблему с ресурсами или памятью, потому что вы постоянно возвращаете весь объект?

Ответы [ 3 ]

10 голосов
/ 09 февраля 2012

Вы возвращаете не весь объект, а ссылку на объект, то есть просто место в памяти, где он находится. Таким образом, объекты не постоянно копируются в памяти при вызове методов по цепочке.

По умолчанию (в основном , но для получения более подробной информации читайте ссылку ), объекты в PHP передаются, возвращаются и присваиваются по ссылке .

См. Документы PHP по ссылкам.

2 голосов
/ 09 февраля 2012

Методы цепочки путем возврата объекта действительно эффективны.

Стек не увеличивается при добавлении новых методов в цепочку.

PHP также не возвращает копию объекта, носсылка, она не передает объект, а является «указателем».

0 голосов
/ 09 февраля 2012

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

Вы можете разбить код на части:

$res = $object->method();
$res = $res->method1('param')
$res = $res->method2('param');
// and res is still equivalent to $object if you return $this

Так что ни копирование объектов, ни вложенные вызовы, ни много элементов в «стеке вызовов» ... Никаких потерь производительности, у вас все должно быть в порядке.

...