2

エラーが発生すると思われるものを誤って入力したとき、私は非常に驚いていました。

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

驚いたことに、それは機能し、通知すらしませんでした。私が最初に試したときにこれを行うことができなかったことを覚えています、そして私はコードパッドでエラーが発生したことに気づきました。私はPHP5.4.4を実行していますが、この機能がいつ追加されたのか、どこで詳細を読むことができるのか疑問に思っています。GoogleはPHP5メソッドチェーンの結果のみを示しましたが、これは別のものだと思いますか?

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 に答える