如何在PHP中使用方法链接时返回函数值?

时间:2017-03-05 21:14:21

标签: php oop method-chaining static-functions

说我有以下课程:

class Test
{

    private static $instance = false;

    public static function test()
    {
        if(!self::$instance)
        {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function test1()
    {
        //...
    }

    public function test2()
    {
        //...
    }

}

我通过链接它们来调用函数:

$data = Test::test(...)->test1(...)->test2(...);

目前上述方法链工作的时刻,我必须继续返回$instance,如果我可以从test2()返回一些内容然后被分配给$data,我真的很想要它。我不知道如何做到这一点,因为我必须继续返回$instance才能让mt方法链工作?

4 个答案:

答案 0 :(得分:1)

如果要链接方法,则需要从其后连接另一个调用的任何方法返回当前实例。但是,链中的最后一次调用不需要这样做。在这种情况下,这意味着您可以自由地从test2()

返回任何内容

请记住,如果你返回与test2()不同的东西,你将来永远无法将任何东西链接到它上面。例如,$data = Test::test(...)->test2(...)->test1(...);无法正常工作 Protip:值得记录您的代码,并附上一些评论,说明哪些内容是不可链接的,以便您以后不要忘记。

答案 1 :(得分:1)

一般来说,如果你正在进行方法链接,并且我假设上面的每个测试都将数据模型返回到不同的状态,并且我假设您需要模型本身的一些数据。我会做以下事情:

class Test
{
    private static $model;

    public function test1() {
        //do something to model
        return $this;
    }

    public function test1() {
        //do something to model
        return $this;
    }

    public function finish_process() {
        //process results
        return $this.model;
    }
}

基本上我现在可以做到以下几点:

$results = Test::test1()->finish_process();

$results = Test::test1()->test2()->finish_process();

答案 2 :(得分:1)

您可以通过引用传递$ data,您可以更改它或将任何数据分配到其中。

// inside class

public function test2( &$data ) {
   $data = 'it will work';
}

// outside class
 $data = '';
 Test::test(...)->test1(...)->test2($data);

检查此http://php.net/manual/en/language.references.pass.php

答案 3 :(得分:0)

return $thistest1()方法中

test2()