Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP5中链接对象:$this->;foo->;酒吧->;baz()_Php_Class_Oop_Chaining - Fatal编程技术网

如何在PHP5中链接对象:$this->;foo->;酒吧->;baz()

如何在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() {

如何在PHP5类中创建链接对象?示例:

$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的解决方案符合我的目的——生成可读的、自文档化的代码(当跨类调用方法时)。