2

当我错误地输入了我认为会引发错误的内容时,我感到非常惊讶:

function r() { return array( 'foo' ); }
echo r()[0];

令我惊讶的是,它起作用了,甚至没有引起注意。我记得当我第一次尝试时无法做到这一点,我注意到在 Codepad 上出现了错误。我正在运行 PHP 5.4.4 并且想知道何时添加了此功能以及我可以在哪里阅读有关它的更多信息。谷歌只显示了PHP 5 Method Chaining的结果,但我想这是别的吗?

4

2 回答 2

3

从 PHP 5.4 开始,可以直接“取消引用”函数/方法的结果;在 PHP 5.5 中,数组文字也是如此(array('foo', 'bar')[1];甚至可能[1,2,3][1];,尽管我不确定后者)

请参阅此处的文档
示例 #7 数组取消引用:

从 PHP 5.4 开始,可以直接对函数或方法调用的结果进行数组取消引用。以前只能使用临时变量。

从 PHP 5.5 开始,可以取消对数组文字的数组引用。

编辑:
要明确一点:方法链接确实是别的东西;它也经常被称为“流畅的界面”。至少在我以前的工作中,每个人都这么称呼它。基本思想是不需要返回任何东西的方法得到一个明确的return $this;声明。结果是这些方法返回对对象的引用,您可以使用它来调用另一个方法,而无需再次键入 var:

$someObject->setProperty('Foobar')//returns $this
           ->anotherMethod();
//instead of
$someObject->setProperty('Foobar');//returns null by default
$someObject->anotherMethod();

该对象的代码如下所示:

class Foo
{
    private $properties = null;

    public function __construct(array $initialProperties = array())
    {
        $this->properties = $initialProperties;
    }
    //chainable:
    public function setProperty($value)
    {
        $this->properties[] = $value;
        return $this;//<-- that's all
    }
    //NOT chainable
    public function anotherMethod()
    {
        return count($this->properties);//or something
    }
}
于 2012-12-28T11:47:36.543 回答
1

在 5.4.0 版本中添加了函数数组解引用

于 2012-12-28T11:46:27.607 回答