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

WBOY
リリース: 2016-07-13 10:38:38
オリジナル
967 人が閲覧しました

現在、$_SERVER の代わりに $GLOBALS['_SERVER'] を使用して関連する環境変数にアクセスすると、常に「_SERVER 未定義」エラーが報告されます。次の使用例:

使用例 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/735083.html

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/735083.html技術記事現在、関連する環境変数にアクセスするために $_SERVER の代わりに $GLOBALS[_SERVER] を使用すると、常に _SERVER 未定義エラーが発生します。以下の使用例: 使用例 1: ?php print_r ($GLOBALS) 現時点では...;
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート