Я использую PHP 5, и я слышал о новой функции в объектно-ориентированном подходе, называемой «сцепление методов». Что именно? Как мне это реализовать?
php
oop
method-chaining
Санджай Хатри
источник
источник
Ответы:
На самом деле это довольно просто, у вас есть ряд методов-мутаторов, которые все возвращают исходные (или другие) объекты, так что вы можете продолжать вызывать методы для возвращаемого объекта.
Это выводит "ab"
Попробуйте онлайн!
источник
$foo->setBar(1)->setBaz(2)
против$table->select()->from('foo')->where('bar = 1')->order('ASC)
. Последний охватывает несколько объектов.$a = (new fakeString())->addA()->addB()->getStr();
По сути, вы берете объект:
Вызовите метод, который эффективно делает
return $this;
в конце:Так как он возвращает тот же объект, или, скорее, ссылку на тот же объект, вы можете продолжать вызывать методы того же класса из возвращаемого значения, например так:
Это действительно так. Две важные вещи:
Как вы заметили, это только PHP 5. В PHP 4 он не будет работать должным образом, потому что он возвращает объекты по значению, а это означает, что вы вызываете методы для разных копий объекта, что может нарушить ваш код.
Опять же, вам нужно вернуть объект в ваших цепочечных методах:
источник
return &$this
в PHP4?Попробуйте этот код:
источник
Цепочка методов означает, что вы можете связывать вызовы методов:
Это означает, что method1 () должен вернуть объект, а method2 () - результат method1 (). Метод 2 () затем передает возвращаемое значение методу 3 ().
Хорошая статья: http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html
источник
Другой способ для статического метода цепочки:
призвание
источник
Есть 49 строк кода, которые позволяют вам связывать методы между массивами следующим образом:
Прочтите эту статью, в которой показано, как объединить все семьдесят функций PHP array_.
http://domexception.blogspot.fi/2013/08/php-magic-methods-and-arrayobject.html
источник
Если вы имеете в виду цепочку методов, как в JavaScript (или некоторые люди имеют в виду jQuery), почему бы просто не взять библиотеку, которая приносит этот dev. опыт в PHP? Например, Дополнительно - https://dsheiko.github.io/extras/ Этот тип расширяет типы PHP с помощью методов JavaScript и Underscore и обеспечивает связывание:
Вы можете связать определенный тип:
или
В качестве альтернативы вы можете стать полиморфным:
источник
Ниже моя модель, которую можно найти по идентификатору в базе данных. Метод with ($ data) - это мои дополнительные параметры для отношений, поэтому я возвращаю $ this, который является самим объектом. На моем контроллере я могу подключиться.
источник