php中的返回项和方法链接

时间:2018-08-31 06:19:58

标签: php method-chaining

我从laravel中注意到的一件事是,您可以获得项目并链接功能。在laravel中如何实现?让我们在这里举个例子

从模型获取数据时,您通常可以执行以下操作  Model::get($id)->toArray();

但是,如果仅输入Model::get($id),那么它也会返回数据。它是如何实现的?我想制作这样的方法,但是我面临的问题是,如果我return $this可以执行其他操作,但是我没有任何数据。但是,如果我返回数据,则无法执行链接。

如果有人可以给我提供一个示例以及有关其完成方式的一些解释,那就太好了。

1 个答案:

答案 0 :(得分:0)

您可以使用clase作为对象属性,并且还具有与之关联的转换魔术方法。在object属性的类中,您提供了链接的方法,当您尝试单独使用该值时,php将自动调用magic方法。例如:

让我们说你有Foo课

class Foo {
    var $value;

    public function __construct($value) {
        $this->value = $value;
    }
    //the magic method __toString is used when you attempt to use the strval of
    // an object instance of this class
    public function __toString() {
        return strval($this->value);
    }
    function toArray(){
        return [
            'value' => $this->value
        ];
    }
}

和一个班级考试

class Test{
    static $foo;
}

如果将Test::$foo = new Foo('var');初始化,则可以使用示例中所示的方法链接:

echo Test::$foo; //will echo "var"
print_r(Test::$foo->toArray()); //will echo "Array ( [value] => var )"

此处的引用:http://php.net/manual/en/language.oop5.magic.php#object.tostring