ホームページ  >  記事  >  バックエンド開発  >  PHP5+ では、$GLOBALS 遅延初期化の概念が導入されています_PHP チュートリアル

PHP5+ では、$GLOBALS 遅延初期化の概念が導入されています_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:08:001130ブラウズ

今日、コードを整理していて、関連する環境変数にアクセスするために $_SERVER の代わりに $GLOBALS['_SERVER'] を使用しようとしましたが、常に「_SERVER unknown」エラーが報告されました。次の使用例:

ユースケース 1:
print_r($GLOBALS);
現時点では、出力には _SERVER 関連の情報はありません:
配列
(
[グローバル] => 配列
*回帰*
[_POST] => 配列
(
)
[_GET] => 配列
(
)
[_COOKIE] => 配列
(
)
[_FILES] => 配列
(
)
)
ユースケース 2:
print_r($GLOBALS);
print_r($_SERVER);
出力には _SERVER 関連情報が含まれています:
配列
(
[グローバル] => 配列
*回帰*
[_POST] => 配列
(
)
[_GET] => 配列
(
)
[_COOKIE] => 配列
(
)
[_FILES] => 配列
(
)
[_SERVER] => 配列
(
)
)
PHP マニュアルで $GLOBALS の説明を確認し、gmail dot com の therandshow のコメントを引用してください:
Gmail ドットコムでショーをご覧ください
PHP 5.4 以降、$GLOBALS はジャストインタイムで初期化されるようになりました。これは、
を使用しない利点があることを意味します。
$GLOBALS 変数を使用すると、初期化のオーバーヘッドを回避できるため、これがどれほどの利点になるか
よくわかりませんが、とにかく $GLOBALS があまり好きではありませんでした。
ソースを追跡すると、PHP5Changelog 更新ログの記述を見つけました:
順序なしリスト項目の改良された Zend エンジン、パフォーマンスの調整と最適化
順序付けされていないリストの項目は、$GLOBALS を JIT 自動グローバルに変更したため、使用された場合にのみ初期化されます (オペコード キャッシュに影響する可能性があります!)www.2cto.com
718 ; 有効にすると、SERVER 変数と ENV 変数が最初に作成されます
719 ; これらの変数
の開始時に代わりに使用されます。
720 ; はスクリプト内では使用されず、このディレクティブをオンにすると
が発生します。
721 ; PHP ディレクティブ register_globals、register_long_arrays、
722 ; このディレクティブが影響を与えるには register_argc_argv を無効にする必要があります。
723 ; http://php.net/auto-globals-jit
724 auto_globals_jit = オン
最終的に、PHP5+ では、auto_globals_jit = On がオンになっている場合、$_SERVER 変数と $_ENV 変数はスクリプトの開始時に作成されず、$SERVER と $ENV が初めて使用されるときに作成されることがわかりました。 。したがって、上記の 2 つのユースケースが表示されます。
備考:
実測結果:
auto_globals_jit 設定は 5.3 の $_REQUEST スーパーグローバルにも影響します
ドキュメントには明示的に記載されていません。
少なくともバージョン 5.3.13 で auto_globals_jit = On が有効になっている場合、$_REQUEST は初めて使用されるときにのみ作成されます。

http://www.bkjia.com/PHPjc/477807.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477807.html技術記事今日、コードを整理していて、関連する環境変数にアクセスするために $_SERVER の代わりに $GLOBALS[_SERVER] を使用しようとしましたが、_SERVER 未定義エラーが常に報告されました。次の使用例: 使用例 1: ?php print_r($GLOBALS)...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。