如何在PHP5中链接对象:$this->;foo->;酒吧->;baz()
如何在PHP5类中创建链接对象?示例:如何在PHP5中链接对象:$this->;foo->;酒吧->;baz(),php,class,oop,chaining,Php,Class,Oop,Chaining,如何在PHP5类中创建链接对象?示例: $myclass->foo->bar->baz(); $this->foo->bar->baz(); Not: $myclass->foo()->bar()->baz(); 另请参见:只要$myclass有一个本身就是实例的成员/属性,它就会这样工作 class foo { public $bar; } class bar { public function hello() {
$myclass->foo->bar->baz();
$this->foo->bar->baz();
Not: $myclass->foo()->bar()->baz();
另请参见:
只要$myclass有一个本身就是实例的成员/属性,它就会这样工作
class foo {
public $bar;
}
class bar {
public function hello() {
return "hello world";
}
}
$myclass = new foo();
$myclass->bar = new bar();
print $myclass->bar->hello();
为了链接这样的函数调用,通常从函数返回self(或this)。实际上,这个问题是不明确的。。。。对我来说,这个@Geo的答案是正确的 你(@Anti)说的可能是 这是我的例子:
<?php
class Greeting {
private $what;
private $who;
public function say($what) {
$this->what = $what;
return $this;
}
public function to($who) {
$this->who = $who;
return $this;
}
public function __toString() {
return sprintf("%s %s\n", $this->what, $this->who);
}
}
$greeting = new Greeting();
echo $greeting->say('hola')->to('gabriel'); // will print: hola gabriel
这个问题令人困惑,但我认为这正是他不想做的:)正是。其目的是“自我记录”对其他类中方法的调用。好:$url->anchor()。错误:$this->anchor()。:-)请记住,您可以更改您接受的答案:PGabriel Sosa是正确的。链接应该通过方法返回值(即返回$this;)并使用$this->method1()->method2()来完成,而不是将对象分配给属性并使用$this->obj1->obj2,这在大多数情况下是不必要的,可能会引起混乱。我还可以补充一点,这是一种非常优雅的编码方式。非常有趣的编码。一个警告似乎是,它不会跨类“记录”方法调用,如$url->anchor()中所示。尽管如此,我相信总有一天我会发现这种编码风格的用处。谢谢…-)Anti-Veeranna的解决方案符合我的目的——生成可读的、自文档化的代码(当跨类调用方法时)。