通常我了解$this->method()
或$this->property
或$object->method()
或$object->property
但有时我会看到$this->$object->method()
。或任何有两个箭头..->.. -> ..
这是什么意思?
答案 0 :(得分:3)
这意味着$object
是一个包含字段名称的变量。
示例:
class Foo
{
public $bar = 'some string';
}
$foo = new Foo();
$field = 'bar';
echo $foo->$field; // prints 'some string'
然后,如果在该字段上调用method()
,则表示该字段也是一个对象。
答案 1 :(得分:2)
示例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;