Как сделать несколько вызовов методов класса в одной строке?


У меня проблема с PHP. В моем php-файле я создал следующую строку:

$foo = $wke->template->notify()
                     ->type("ERROR")
                     ->errno("0x14")
                     ->msg("You are not logged.")
                     ->page("login.tpl");

В конце концов, мне нужна моя переменная $foo, которая вернет это:

$foo->type = "ERROR" 
$foo->errno= "0x14" 
$foo->msg= "You are not logged." 
$foo->page= "login.tpl"

Пожалуйста, обратите внимание, что $wke->template - это то место, где мне нужно вызвать элемент notify().

 12
Author: kenorb, 2012-07-19

2 answers

Способ вызова функции класса по одному просто с помощью "->", потому что функция возвращает один и тот же объект класса. Смотрите пример ниже. Вы получите это

class Wke {

    public $type;
    public $errno;
    public $msg;
    public $page;

    public $template = $this;

    public function notify(){
        return $this;
    }

    public function errorno($error){
        $this->errno = $error;
        return $this; // returning same object so you can call the another function in sequence by just ->
    }
    public function type($type){
        $this->type = $type;
        return $this;
    }
    public function msg($msg){
        $this->msg = $msg;
        return $this;
    }
    public function page($page){
        $this->page = $page;
        return $this;
    }
}

Вся магия заключается в return $this;

 31
Author: Rajan Rawal, 2012-07-19 04:02:36

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

 1
Author: jprofitt, 2012-07-19 02:38:26