链接函数的结果?从什么时候开始呢?

时间:2012-12-28 11:42:11

标签: php

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

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

令我惊讶的是,它起作用,甚至没有发出通知。我记得第一次尝试时无法做到这一点,我在键盘an error was raised上注意到了这一点。我正在运行PHP 5.4.4并且想知道何时添加了这个功能以及我可以在哪里阅读更多相关信息。 Google只显示 PHP 5 Method Chaining 的结果,但我想这是其他的?

2 个答案:

答案 0 :(得分:3)

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

See the docs here
示例#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
    }
}

答案 1 :(得分:1)

版本5.4.0中添加了

function array dereferencing