如何在PHP 5中链接对象:$ this-> foo-> bar-> baz()

时间:2009-09-06 11:22:06

标签: php class oop chaining

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

$myclass->foo->bar->baz();
$this->foo->bar->baz();
Not: $myclass->foo()->bar()->baz();

另见:
http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html

3 个答案:

答案 0 :(得分:7)

实际上这些问题含糊不清......对我来说,@ Geo的回答是正确的。

你(@Anti)所说的可能是composition

这是我的例子:

<?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

&GT;

答案 1 :(得分:5)

只要你的$ myclass有一个成员本身就是一个实例,它就会像那样工作。

class foo {
   public $bar;
}

class bar {
    public function hello() {
       return "hello world";
    }
}

$myclass = new foo();
$myclass->bar = new bar();
print $myclass->bar->hello();

答案 2 :(得分:1)

为了链接这样的函数调用,通常从函数返回self(或this)。