【问题标题】:multiple object operators in one call一次调用中的多个对象运算符
【发布时间】:2018-03-30 13:17:29
【问题描述】:

对不起,

也许这个问题已经存在,但我找不到。我是 PHP 新手……只是需要一些解释。

当我们在一次调用中使用多个对象运算符时,下一行是什么意思。

$variable = $this->any1->any2->any3->get_data(params);

感谢您的解释!

【问题讨论】:

  • 但是,您的示例没有函数调用运算符,所以如果从字面上理解,那么它不能是方法链接,它只是逐步嵌套的成员的沼泽标准访问对象。
  • 不完全是方法链。该代码仅遵循对象字段。方法转换为$this->any1()->any2()->any3()
  • 是的,any1、any2、any3 不是方法……我想是 stdClasses,只是我不明白如何阅读。
  • 那么答案很明显:你访问的是this的字段any1,然后是its字段any2,然后等等。如果你知道@是什么987654326@操作员做的,你知道其他人做的。
  • “不清楚为什么我们需要嵌套对象然后调用函数?”你告诉我们!是你的榜样。我们永远需要用任何语言做任何事情;如果它有一个有用的目的,我们就会这样做。好吧,这就是理想的世界——无论提示您提出这个问题的代码可能有用,也可能没有用。 “它们之间有什么联系?如何评价?” 和上面写的一模一样;每个字段都将被访问,然后在最后一个字段上调用该方法。最后:如果你不知道为什么有人会写这样的代码,那就别写了,别担心。

标签: php object call operator-keyword


【解决方案1】:

这是一个例子:

class A{
    private $any1; //a class B object

    public function __construct(){ $this->any1=new B(); }

    public function myMethod(){
        $variable=$this->any1->any2->any3->get_data('aParam'); //You are here
        var_dump($variable);
    }
}

class B{
    public $any2; //a class C object

    public function __construct(){ $this->any2=new C(); }
}

class C{
    public $any3; //a class D object

    public function __construct(){ $this->any3=new D(); }
}

class D{
    private $data=['aParam'=>'A content'];

    public function get_data($params){ //Here is what you want
        return $this->data[$params]; 
    }
}

$a=new A();
$a->myMethod(); //you'll see: string(9) "A content"

避免在类中使用公共属性,使用 getter 和 setter(只是更短)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多