web-dev-qa-db-ja.com

PHP globalまたは$ GLOBALS

関数の外部で宣言された変数を使用するときにベストプラクティス/推奨事項がありますか?

  1. global $myVar
  2. $GLOBALS['myVar']

ありがとうございました。

42
Francisc

本当にすべきなのは、グローバルをまったく使用せずに変数を関数に渡すことです。

参照パラメーターとして渡すことにより、関数の外部で変数を変更する方法の例:

function myFunc(&$myVar)
{
    $myVar = 10;
}

$foo = 0;
myFunc($foo);
var_dump($foo); // yields 10
31
reko_t

さて、限られた状況でのみグローバルを使用する必要がありますが、質問に答えるために:

  1. globalは潜在的にわずかに高速です(ほとんど違いはありません)。
  2. _$GLOBALS_(_$GLOBAL_ではなく)は読みやすいです。なぜなら、それを見るたびに、グローバル変数にアクセス/変更していることがわかるからです。これは、厄介なバグを回避するために重要です。
  3. 関数内でグローバル変数を設定解除する場合は、unset($GLOBALS['varname'])ではなくglobal $varname; unset($varname);を使用する必要があります。

ポイント1と2については、ここで quote Sara Golemonを紹介します。

_$GLOBALS_配列を使用することはどういう意味ですか?そうです、globalキーワードは技術的に高速です。今、私はここで一つのことについて本当に明確になりたいです。ローカライズされた[コンパイルされた変数]としてグローバルを使用することで与えられるマイナーなスピードアフォーダンスは、5年でコードを見て、_$foo_がグローバルスコープから来たことを知る保守性と真剣に比較検討する必要があります。 something_using($GLOBALS['foo']);は常にglobal $foo; /* buncha code */ something_using($foo);よりも明確になります。ペニーにせず、愚かなことをしないでください。

73
Artefacto

私はあなたの職務の最上位にあるグローバルに行きます。そのようにして、使用されているグローバルを簡単に確認できます。

3
Lekensteyn

OOPでグローバルを使用しないことをお勧めします。常により良い方法があるはずです

3
Tokk