1

假设您可以(new Object)->method()在 PHP5.4+ 中执行此操作,我想知道为什么我不能这样做:

<?php

class Item {
    public $property = 'test';
}

class Container
{
    public function getItem()
    {
        return new Item();
    }
}

echo get_class(($object = (new Container())->getItem())); // returns Item

// this comes up with error
echo ($object = (new Container())->getItem())->property;

为什么最后一行代码触发PHP Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR)

编辑:

看来我需要澄清我的问题,因为我看到的答案与我的问题完全无关。我不是在问如何摆脱语法错误。我的问题是:为什么我不能访问表达式上的属性($object = (new Container())->getItem()),而get_class()告诉我这是 Item 的一个实例?

4

2 回答 2

6

您只能在 PHP 5.4 中取消引用函数返回值(我相信在 5.5 中您可以取消引用新创建的数组,例如['x','y','z'][$index]

由于赋值不是一个函数,你不能取消引用它。

于 2013-10-18T13:09:57.167 回答
0

为什么不使用扩展类?

class Item {
 public $Val = "Testing";

}

class Container extends Item {

    public function getItem()
    {
        return new Item();
    } // This method is no longer needed

}


$Object = new Container();
echo $Object->Val; // Output of: Testing

这从 PHP4 开始可用

扩展手册

或者,如果您希望从 OOP 范围初始化对象:

Class Item { 
 public $Val = "SomeString"; 
}

class Container { 
 public $Instance;
 public function __construct(){
   $this->Instance = new Item();
 } 

}
$Object = new Container();
echo $Object->Instance->Val;
于 2013-10-18T13:18:28.223 回答