PHP赋值返回值

Jan*_*ota 1 php syntax-error

假设你可以(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;
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

Nie*_*sol 6

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

由于赋值不是函数,因此您无法取消引用它.

  • 解除引用是一种特殊语法,它在解析阶段(执行任何代码之前)发生.解析器无法"看到"赋值是可以解除引用的内容,因为这取决于在运行时发生的事情. (2认同)