Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.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
Php 如何在类内部链接?_Php_Fluent Interface - Fatal编程技术网

Php 如何在类内部链接?

Php 如何在类内部链接?,php,fluent-interface,Php,Fluent Interface,我想知道我们是否可以在类本身内部链接?比如说我有这两门课, 头等舱 class Object1 { public $item; public $obj2; public function __construct() { $this->obj2 = new Object2(); } public function chain1() { $this->item = 'Chain1 ';

我想知道我们是否可以在类本身内部链接?比如说我有这两门课,

头等舱

class Object1
{
    public $item;
    public $obj2;

    public function __construct() 
    {
        $this->obj2 = new Object2();
    }

    public function chain1()
    {
        $this->item = 'Chain1 ';

        return $this; 
    }

    public function chain2()
    {

        //$this->item = $this->obj2->chain3(); // works ok.
        $this->item = $this->obj2->chain3()->chain1(); // how to chain yourself?

        return $this;
    }
}
二等舱

class Object2
{
    public $item;
    public function chain3()
    {
        $this->item = 'Chain 3 ';
        return $this; 
    }

    public function chain4()
    {
        $this->item = 'Chain4 ';
        return $this;
    }
}

$obj1 = new Object1();
print_r($obj1->chain2()->item);
错误

atal error: Call to undefined method Object2::chain1() in C:...
我需要在类
Ojbect1()
本身中链接
chain1()

$this->item = $this->obj2->chain3()->chain1(); 

有可能吗?

您可以通过从中返回
$this
来链接方法:

class foo
{
    public $foo;
    public function yayThisChains()
    {
        return $this->chain()->chain2()->doIt();
    }
    private function doIt()
    {
        $this->foo = 'bar';
        return $this;
    }
    private function chain2() { return $this; }
    private function chain() { return $this; }
}

$foo = new foo();
echo $foo->yayThisChains()->foo;
问题是您试图使用相同的
$this
链接两个不同的对象。您可以扩展类,以便
$this
引用相同的类,而不是通过构造函数在
object1
中构建
object2

class Object2 extends Object1

不,这是不可能的,也没有意义。你会得到什么?请不要告诉我“在编辑器中看起来会更酷”;那么,你怎么能期望它调用Object1类中的方法呢?@PeeHaa fix'd。仅仅两年后。