我在一些图书馆看到过这样的事情:
$this->getResponse()->setRedirect($returnUrl);
这个'multicall'是如何完成的,或者,如何构建类来做这样的事情?
我想:
class greeting
{
public function hi()
{
public function howAreYou()
{
echo 'How are you?';
}
}
}
$greet = new greeting;
$greet->hi()->howAreYou();
但我觉得它不太好,我会更好地使用像延伸这样的东西,但我不知道。谢谢您的建议。
答案 0 :(得分:4)
如果这是一个调用自身的类实例,则会调用"方法链接"。
在PHP中,可以使用return $this
完成;请注意,这是一种与类继承非常不同的机制 - 将它们视为可互换的方式并不合理。
答案 1 :(得分:3)
getResponse()
正在返回一个具有setRedirect()
方法的类实例。
示例:
class Foo
{
public function getResponse()
{
$redirect = new Bar();
return $redirect;
}
}
class Bar
{
public function setRedirect($returnUrl)
{
// do something
}
}
$foo = new Foo();
$foo->getResponse()->setRedirect("returnUrl");
答案 2 :(得分:2)
没有
您需要做的就是在每个功能的最后返回自我。
所以你的例子就像>
class greeting
{
public function hi()
{
echo "Hi";
return $this;
}
public function howAreYou()
{
echo 'How are you?';
return $this;
}
}
$greet = new greeting;
$greet->hi()->howAreYou();
甚至:
$greet->hi()->howAreYou()->hi()->howAreYou();
答案 3 :(得分:1)
链接方法与在方法中声明函数不同...实际上后者会吐出错误(不是函数声明,而是你调用它的方式)。为了链接一个方法,只需让它返回对象本身:
Class chainableObject
{
public $name=null;
public function __construct($name='')
{
$this->name=$name;
return $this;
}
public function setName($name)
{
$this->name = $name;
return $this;//makes chainable
}
public function greet()
{
echo 'Hello, '.$this->name;
return $this;
}
}
$chain = new chainableObject('Frank')->greet();//outputs: Hello, frank
解释:所有方法都返回实例本身,所以基本上,读取片段的最后一行,如[create object with name:Frank] => call method greet on this action的返回值。由于返回值为$this
,具有greet方法的对象,即将发生的事情......简单,更多信息:只是谷歌 php方法链接
答案 4 :(得分:1)
class stutter{
public function a(){
echo 'h';
return $this;
}
public function b(){
echo 'hello world!';
}
}
$ var = new stutter(); VAR->一种() - > B();
输出是:
h hello world