У меня вопрос о ООП в PHP5. Я видел все больше и больше кода, написанных так:
$object->function()->first(array('str','str','str'))->second(array(1,2,3,4,5));
Но я не знаю, как создать этот метод. Надеюсь, кто-то может мне помочь здесь: 0) большое спасибо.
Ключом к методам цепочки, подобным тому, что есть в ваших собственных классах, является возврат объекта (почти всегда $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(...);
$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