说我有以下课程:
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方法链工作?
答案 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);
答案 3 :(得分:0)
return $this
和test1()
方法中 test2()
。