вызов функций в последовательности - PullRequest
2 голосов
/ 28 ноября 2011

Как это работает?

$ object-> foo1 () -> foo2 () -> foo3 ();

Я работаю в Magento php framework. В Magento функции называются последовательностями. Но я не понимаю, как это работает. Может кто-нибудь объяснить.

Ответы [ 2 ]

5 голосов
/ 28 ноября 2011
$object->foo1()->foo2()->foo3();

Сначала PHP получит указатель на метод foo1 из переменной $object.Он вызывает этот метод, который затем возвращает другой объект.Этот второй объект (назовем его $object2) имеет метод foo2(), который также вызывается.foo2() возвращает другой объект ($object3), который имеет метод foo3(), который возвращает все, что ему нравится.

В некоторых случаях $object, $object2 и $object3 являются просто указателямик тому же объекту.Это означает, что вы можете продолжать вызывать методы одного и того же класса в удобной последовательности.

Вы можете достичь этого довольно легко:

class Foo
{
    public function nicely()
    {
        return $this;
    }

    public function formatted()
    {
        return $this;
    }

    public function chained()
    {
        return $this;
    }

    public function calls()
    {
        return $this;
    }
}

$foo = new Foo();
$foo->nicely()->formatted()->chained()->calls();
3 голосов
/ 28 ноября 2011

Когда методы в классе возвращают значения, они возвращают объекты сами по себе.Это позволяет вам продолжать вызывать другие методы в этом классе в последовательности, как вы опубликовали.

class myClassA {

    public $str = NULL;

    public function setStr( $value ){
        $this->str .= $value;
        return $this; // This is the key to sequencing
    }

}

$myclass = new MyClassA();
$myclass->setStr("H")->setStr("E");

// If you echoed the $str variable in myClassA, you would get
// "HE"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...