23

$ array [key]のように一重引用符または二重引用符なしで配列を使用しても大丈夫ですか?一重引用符または二重引用符を使用しない場合、PHPは最初に定数を探すので、それは悪いことだと思いました。私の同僚の一人は、それは問題ではないと私に言いました。

皆さんはどう思いますか?

4

6 に答える 6

42

ほとんどの場合に機能する場合でも、OK とは見なされません。


基本的に、PHPがこれを見ると:

echo $array[key];

defineで定義され、 -- と呼ばれる定数を検索し、key存在しない場合は if が'key'値を取得します。


ただし、コードの前半に次のようなものがある場合:

define('key', 'glop');

かかりません

echo $array['key'];

もう ; 代わりに、定数の値をkey使用します。コードは次のようになります。

echo $array['glop'];


最後に、キーの名前の周りに引用符を付けないことは、少なくとも 2 つの理由で良くありません。

  • 期待どおりに動作しないリスクがあります。これは非常に悪いこと です。
    • もしかしたら、今日...
    • しかし、来週/月/年はどうでしょうか?
    • たぶん、いつの日か、間違ったdefine名前の定数になるでしょう;-)
  • パフォーマンスには良くありません:
    • 使用する前に、定数を検索する必要があります'key'
    • そして、コメントで述べたように、通知を生成します(無効error_reportingにしdisplay_errorsても、後で破棄しても、通知/警告/エラーは引き続き生成されます)

だから: この点についてあの男の言うことを聞くべきではない. 彼は間違っている.それは問題だ.


また、stackoverflow で人々が言うよりも「優れた」「証拠」が必要な場合は、参考として、マニュアルのこのセクションを参照してください: $foo[bar] はなぜ間違っているのですか?

于 2010-03-08T23:06:35.263 に答える
6

これはよくありません。他の人が言ったことに付け加えると、ほとんどの場合、エラーが発生します。

8 Notice Use of undefined constant key - assumed 'key' in file: 'index.php' on line 46

「$foo[bar] が間違っている理由」については、 PHP マニュアルのセクションを参照してください。このページの「配列の推奨事項と禁止事項」の下: http://php.net/manual/en/language.types.array.php

于 2010-03-08T23:09:03.200 に答える
4

これは間違っており、定数を自動定義します:

$var = $array[bar];

ただし、この使用法は正しいです。

$var = "string $array[bar] ...";

PHP2 との互換性のために、この古い構文は文字列コンテキストで引き続き使用できます。{中括弧}も使用しない限り、キーを引用すると解析エラーが発生します。

于 2011-02-20T19:47:12.077 に答える
3

PHP マニュアルから- $foo[bar] が間違っているのはなぜですか?

文字列リテラルの配列インデックスは常に引用符で囲んでください。たとえば、$foo['bar'] は正しいですが、$foo[bar] は正しくありません。しかし、なぜ?古いスクリプトでは、この種の構文に遭遇するのが一般的です。

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>

これは間違っていますが、うまくいきます。その理由は、このコードには文字列 ('bar' - 引用符に注意) ではなく、未定義の定数 (bar) があるためです。PHP は将来、残念ながらそのようなコードでは同じ名前を持つ定数を定義する可能性があります。これが機能するのは、PHP が生の文字列 (既知の記号に対応しない、引用符で囲まれていない文字列) を生の文字列を含む文字列に自動的に変換するためです。たとえば、bar という名前の定数が定義されていない場合、PHP は文字列 'bar' に置き換えてそれを使用します。

マニュアルには、さらにいくつかの例があります。

于 2010-03-08T23:10:22.323 に答える
2

いくつかの理由から、キー値を引用しないことは悪い習慣です:

  1. define'd 定数など、意味のあるシンボル名との衝突の可能性。
  2. 一部のキーは、引用符なしでは表現できません (たとえば、 key "]")。
  3. 悪い習慣は後であなたを苦しめる可能性があります(つまり、#1と#2に関して)。
  4. パフォーマンス - の検索にdefineは時間がかかります。

頻繁に渡すものの標準的な要素に過ぎない名前の周りに引用符を入力することを避けたい場合は、object->property構文の代わりに構文を取るオブジェクトを代わりに使用することをお勧めし$array["element"]ます。

于 2010-03-08T23:06:08.117 に答える
2

キーが実際に定数でない限り、キーを引用符で囲まない理由はありません。

PHP が動作する方法は、入力した値の定数値を探すことですが、定数が見つからない場合は文字列表現を取ります。

途中で誰かがあなたのコードを編集して、そのキー名を持つ定数を追加したとしても、それはさらに頭痛の種になるだけです。

于 2010-03-08T23:08:21.867 に答える