[解決済み】PHPで(空の)配列を初期化する最適な方法
質問
他のある言語(例えば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 構文を使用)のサポートの実装に影響されたのだと思います。
関連
-
[解決済み】メンバ関数をnullで呼び出す?
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] JavaScriptで配列を空にするにはどうしたらいいですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PHPで空の値からデフォルトオブジェクトを作成する?
-
[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】変な電話番号を生成するフェイカー?
-
[解決済み】pdo - 非オブジェクトのメンバー関数prepare()への呼び出し【重複】。
-
[解決済み】SSLピア証明書またはSSHリモートキーがOKでなかった
-
[解決済み】In_arrayが動作しない。
-
[解決済み】Wordpressの子テーマのstyle.cssが効かない。
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?
-
[解決済み] PHP 未定義関数への呼び出し