Как построить многопользовательские функции в PHP5 - PullRequest
2 голосов
/ 21 июля 2010

У меня вопрос по ООП в PHP5. Я видел все больше и больше кода, написанного так:

$object->function()->first(array('str','str','str'))->second(array(1,2,3,4,5));

Но я не знаю, как создать этот метод. Я надеюсь, что кто-нибудь может помочь мне здесь: 0) Большое спасибо.

Ответы [ 2 ]

8 голосов
/ 21 июля 2010

Ключом к созданию цепочек методов в ваших собственных классах является возвращение объекта (почти всегда $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(...);, за исключением безобразия установки переменных, которые вы никогда не будете использовать после вызова.

0 голосов
/ 21 июля 2010
$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
...