Как построить многопользовательские функции в PHP5
У меня вопрос по ООП в PHP5. Я видел все больше и больше кода, написанного так:
$object->function()->first(array('str','str','str'))->second(array(1,2,3,4,5));
Но я не знаю, как создать этот метод. Я надеюсь, что кто-нибудь может помочь мне здесь:0) Большое спасибо.
2 ответа
Ключом к созданию цепочек методов в ваших собственных классах является возвращение объекта (почти всегда $this
), который затем используется в качестве объекта для следующего вызова метода.
Вот так:
class example
{
public function a_function()
{
return $this;
}
public function first($some_array)
{
// do some stuff with $some_array, then...
return $this;
}
public function second($some_other_array)
{
// do some stuff
return $this;
}
}
$obj = new example();
$obj->a_function()->first(array('str', 'str', 'str'))->second(array(1, 2, 3, 4, 5));
Обратите внимание, что возможно вернуть объект, отличный от $this
и цепочка вещей на самом деле просто более короткий способ сказать $a = $obj->first(...); $b = $a->second(...);
минус безобразие установки переменных, которые вы никогда больше не будете использовать после вызова.
$object->function()->first(array('str','str','str'))->secound(array(1,2,3,4,5));
Это не совсем правильный PHP, но это говорит о том, что... Вы вызываете метод класса $ object, который сам возвращает объект, в котором вы вызываете метод с именем first()
который также возвращает объект, в котором вы вызываете метод с именем second()
,
Таким образом, это не обязательно только один класс (хотя это может быть) с одним методом, это целая серия, возможно, разных классов.
Что-то вроде:
class AnotherClass {
public function AnotherClassMethod() {
return 'Hello World';
}
}
class MyClass {
public function MyClassMethod() {
return new AnotherClass();
}
}
$object = new MyClass();
echo $object->MyClassMethod()->AnotherClassMethod(); // Hello World