我的问题很简单,因为:
class MyClass{
function a(){
echo "F.A ";
}
function b(){
echo "F.B ";
}
}
$c=new MyClass;
$c->a()->b()->b()->a();
这样它就会输出:
F.A F.B F.B F.A
需要对代码进行哪些更改才能使其工作,或者它应该按原样运行,甚至只是调用它。如果我可以得到任何这个术语,我可以研究它mysqlf,但我不太确定谷歌是什么。
提前致谢!
答案 0 :(得分:7)
在每项功能中,你必须:
return $this;
答案 1 :(得分:6)
将类似的方法串在一起称为“链接”。
每个方法中的 return $this;
将启用可链接性,因为它不断地将实例从一个方法传递到另一个方法,从而维护链。
您必须明确这样做,因为PHP functions will return NULL
by default。
所以,你只需要再多行。
<?php
class MyClass{
function a(){
echo "F.A ";
return $this; // <== Allows chainability
}
function b(){
echo "F.B ";
return $this;
}
}
$c=new MyClass;
$c->a()->b()->b()->a();
?>
查看 this article by John Squibb ,以进一步探索PHP中的可链接性。
你可以做各种具有可链接性的东西。方法通常涉及参数。这是一个“论证链”:
<?php
class MyClass{
private $args = array();
public function a(){
$this->args = array_merge($this->args, func_get_args());
return $this;
}
public function b(){
$this->args = array_merge($this->args, func_get_args());
return $this;
}
public function c(){
$this->args = array_merge($this->args, func_get_args());
echo "<pre>";
print_r($this->args);
echo "</pre>";
return $this;
}
}
$c=new MyClass;
$c->a("a")->b("b","c")->b(4, "cat")->a("dog", 5)->c("end")->b("no")->c("ok");
// Output:
// Array ( [0] => a [1] => b [2] => c [3] => 4 [4] => cat
// [5] => dog [6] => 5 [7] => end )
// Array ( [0] => a [1] => b [2] => c [3] => 4 [4] => cat
// [5] => dog [6] => 5 [7] => end [8] => no [9] => ok )
?>
答案 2 :(得分:0)
方法链在域特定语言中被大量使用,特别是所谓的“流畅接口”,由Martin Fowler创造。如果您想探索这种富有表现力的编程风格,请在线观看他的DSL书籍预印。 http://martinfowler.com/dslwip/