代码之家  ›  专栏  ›  技术社区  ›  Run

如何在类内进行内部链接?

  •  1
  • Run  · 技术社区  · 11 年前

    我想知道我们是否可以在一个类本身内部链接?例如,我有这两个类,

    头等舱,

    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:...
    

    我需要链 chain1() 在课堂上 Ojbect1() 它本身

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

    有可能吗?

    1 回复  |  直到 11 年前
        1
  •  1
  •   Félix Adriyel Gagnon-Grenier    9 年前

    您可以通过返回 $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;
    

    问题是您试图使用同一个链接两个不同的对象 $这个 。你可以扩展你的课程 $这个 指的是同一类而不是建筑 object2 在里面 object1 通过构造函数:

    class Object2 extends Object1
    
    推荐文章