1. ホーム
  2. php

[解決済み】PHPで(空の)配列を初期化する最適な方法

2022-03-28 15:02:36

質問

他のある言語(例えばAS3)では、新しい配列の初期化を次のように行うとより速くなることが指摘されています。 var foo = [] よりも var foo = new Array() オブジェクトの作成とインスタンス化の理由からです。PHPで同等のものがあるのでしょうかね?

class Foo {
    private $arr = array(); // is there another / better way?
}

解決方法は?

ECMAScriptの実装(例えば、ActionScriptやJavaScript)で。 Array() はコンストラクタ関数であり [] は配列リテラルの文法の一部です。 両者はまったく異なる方法で最適化され、実行されます。リテラル文法では、関数を呼び出すことによるオーバーヘッドに悩まされることはありません。

一方、PHPには、一見関数のように見えるが、そのように扱われない言語構成があります。 PHP 5.4 でさえも [] というのも、コンパイラやパーサに関する限り、両者は完全に同義語だからです。

// Before 5.4, you could only write
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// As of PHP 5.4, the following is synonymous with the above
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

古いバージョンのPHPをサポートする必要がある場合は、前者の構文を使用します。 可読性の議論もありますが、長年JSを開発してきた私にとっては、後者の方がむしろ自然なように思えます。  実際に私は、配列の初期化に [] PHPを初めて勉強したとき。

この 変更 は、もともと提案されたものの、コア開発者の反対多数により却下されたもので、その理由は以下の通りです。

<ブロッククオート

このパッチは、コア開発者のわずかな反対票によって受け入れられませんでした。しかし、コア開発者とユーザーランドの投票の累積平均を取ると、逆の結果になるようです。

しかし、5.4 に至るまでには心境の変化があったようで、おそらく MongoDB のような一般的なデータベース(ECMAScript 構文を使用)のサポートの実装に影響されたのだと思います。