PHP OOP初学者 - 什么是$ this-> object-> method()或任何带有2个箭头的东西 - >

时间:2017-04-06 15:33:16

标签: php oop

通常我了解$this->method()$this->property$object->method()$object->property

但有时我会看到$this->$object->method()。或任何有两个箭头..->.. -> ..

的东西

这是什么意思?

4 个答案:

答案 0 :(得分:3)

这意味着$object是一个包含字段名称的变量。

示例:

class Foo 
{
    public $bar = 'some string';
}

$foo = new Foo();
$field = 'bar';
echo $foo->$field; // prints 'some string'

然后,如果在该字段上调用method(),则表示该字段也是一个对象。

答案 1 :(得分:2)

PHP code demo

示例1: 这里我们创建对象(new X())并调用公共函数test(),它返回当前的类对象(即X类),然后我在该对象上调用newTest()函数。

<?php
ini_set("display_errors", 1);
class X
{
    public $x=0;
    public function test($x)
    {
        $this->x=$x;
        return $this;
    }
    public function newTest()
    {
        print_r($this);
    }
}
(new X())
        ->test(10)
        ->newTest();

示例2:这里我们创建了类Y对象并在类Z中设置了类Y对象,然后调用方法test()

$object= new Y(new Z());
$object->test();

当我们调用函数test时,调用$this->{$object}->in_z();等于调用$this->myNewObject->in_z();并输出in_z

class Y
{
    public $myNewObject=null;
    public function __construct($object)
    {
        $this->myNewObject=$object;
    }
    public function test()
    {
        $object="myNewObject";
        $this->{$object}->in_z();
    }
}

class Z
{
    public function in_z()
    {
        echo __FUNCTION__;
    }
}
$object= new Y(new Z());
$object->test();

答案 2 :(得分:2)

想象一下对象教师

对象教师有一个名为:teach()的方法 如果您使用的是Teacher对象,则可以调用$ this-&gt; teach();

现在假设您有另一个具有属性&#34;教师&#34;这是一个教师对象。

如果您使用的是教室对象,现在可以调用$ this-&gt; teacher-&gt; teach(),它将调用教师对象的teach()方法。

答案 3 :(得分:2)

当你有对象的对象时。
例如:

class Test{
    private $obj;

    public function __construct() {
        $this->obj = (object) array('name' => 'foo');
    }

    public function printObj(){
        echo ($this->obj->name);
    }
}

$testClassObject = new Test();
$testClassObject->printObj();

了解它的工作原理。首先,在代码中有一个Object(stdClass Object)和假设在这个类中,如果有一个名为myAnotherTest()的方法返回stdClass类型的Object(就像DB数据对象),那么你可以使用{{1} }。您可以根据需要进行链接,请仔细查看以下代码,另请参阅输出

$testClassObject->myAnotherTest()->result->name;

注意:如果您有class Test{ private $obj; public function __construct() { $this->obj = (object) array('name' => 'foo'); } public function printObj(){ echo ($this->obj->name); } public function myAnotherTest(){ return $this->obj; } } $testClassObject = new Test(); $testClassObject->printObj(); echo "<br>No testing another method<br>"; echo $testClassObject->myAnotherTest()->name; //see this you will be clear 指向的另一个对象而不是name的字符串值,则可以使用类似的 foo

echo $testClassObject->myAnotherTest()->name->subObject;