目次
$ globalsとは何ですか?
なぜ$ Globalsが悪い評判を得ているのか
$ Globalsがまだ役立つ場合
1。レガシーコードのメンテナンス
2。簡単なスクリプトの構成または定数
ベストプラクティス(使用する必要がある場合)
結論
ホームページ バックエンド開発 PHPチュートリアル $ Globals:歴史的な遺物または誤解されたツール?

$ Globals:歴史的な遺物または誤解されたツール?

Aug 03, 2025 pm 02:31 PM
PHP $GLOBALS

$ Globalsは本質的に悪くありません。それはその価値がその使用に依存するツールです。これは、すべてのグローバル変数へのアクセスを提供する連想配列であり、グローバルキーワードなしで機能変数を読み取るための関数を可能にします。その否定的な評判は、グローバルな状態を奨励し、依存関係を隠し、緊密な結合を促進し、変化を追跡するのを難しくすることに起因します。ただし、$ Globalsは、特定のシナリオで依然として役立ちます。1。リファクタリングが非現実的であるレガシーコードメンテナンス。 2。基本的な構成に$ Globalsを使用した単純なスクリプト。 3. WordPressなどの高度なデバッグまたはフックシステム。 4.ランタイムパッチングや一時的なオーバーライドによるテストなどのまれなケース。使用する場合、ベストプラクティスには、使用法の文書化、不必要な変更の回避、新しいアプリケーションのコアロジックに依存せず、その使用をブートストラップまたは構成レイヤーに分離することが含まれます。最新のPHPでは、依存関係の注入と明示的なパラメーターの合格が、より良いテスト可能性と保守性のために推奨されます。したがって、$ Globalsは機能的であり、ニッチアプリケーションを持っていますが、一般に、より予測可能なパターンを支持して回避する必要があります。

$ Globals:歴史的な遺物または誤解されたツール?

$ Globalsは、PHPのSuperGlobalsの1つです。これは、スクリプト全体のすべてのスコープで利用可能なグローバル変数です。長年にわたり、それは避けるべきものとしての評判を育ててきました。しばしば「歴史的な遺物」またはコーディングの貧弱な慣行の兆候とラベル付けされています。しかし、それは本当に時代遅れですか、それとも単に誤解されていますか?

$ Globals:歴史的な遺物または誤解されたツール?

短い答え: $ Globalsは本質的に悪くはありません。それはツールであり、あらゆるツールと同様に、その価値はその使用方法に依存します。

$ Globalsが何であるか、なぜそれが悪いラップを得るのか、そしてそれがまだ有用かもしれないときに分解しましょう。

$ Globals:歴史的な遺物または誤解されたツール?

$ globalsとは何ですか?

$GLOBALS PHPスクリプトのグローバル範囲で定義されたすべての変数への参照を含む連想配列です。例えば:

 $ foo = 'hello';
関数example(){
    echo $ globals ['foo']; //出力:こんにちは
}

$_GET$_POSTなどの他のスーパーグロバルとは異なり、 $GLOBALSglobalキーワードを使用する必要なく、関数内からユーザー定義のグローバル変数に直接アクセスできます。

$ Globals:歴史的な遺物または誤解されたツール?

この動作はそれを強力にしますが、悪用された場合も危険です。


なぜ$ Globalsが悪い評判を得ているのか

いくつかの理由がそのネガティブなイメージに貢献しています:

  • グローバルな状態を奨励する$GLOBALSに依存すると、グローバル変数に依存するコードにつながる可能性があり、テスト、デバッグ、およびメンテナンスがより困難になります。
  • 依存関係を不明瞭にする:関数が$GLOBALS['something']にアクセスする場合、それがどの外部状態に依存しているかはすぐにはわかりません。
  • タイトな結合を促進する:グローバルスコープから変数を引き出すコードは、その範囲にしっかりと結合され、再利用性を低下させます。
  • 変更を追跡するのが難しい:コードのどの部分もグローバル変数を変更できるため、バグのダウンを追跡することはより困難になります。

これらの問題は現実的で深刻です。特に、予測可能性と保守性が重要な大規模なアプリケーションまたはチーム環境では。

しかし、 $GLOBALS自体を非難することは、悪いカットのためにナイフを非難するようなものです。問題はツールではなく、それがどのように振る舞うかです。


$ Globalsがまだ役立つ場合

現代のPHP開発は、依存関係の注入、サービスコンテナ、および明示的なパラメーターの合格を支持しますが、 $GLOBALS実用的である可能性のあるニッチのケースがあります。

1。レガシーコードのメンテナンス

古いPHPアプリケーション(特に事前のプリプまたは手続きシステム)では、 $GLOBALSすでに使用されていることがよくあります。すべてを一度にリファクトすることは実行不可能な場合があります。そのような場合、 $GLOBALSを理解し、安全に作業することが必要です。

2。簡単なスクリプトの構成または定数

シンプルさが重要な小さなユーティリティスクリプトまたは共有ホスティング環境では、一部の開発者は$GLOBALSを使用して構成を管理します。

 $ globals ['config'] = [
    'db_host' => 'localhost'、
    'debug' => true
];

定数または構成ファイルの方が優れていますが、このパターンは小さなプロジェクトでは壊滅的ではありません。

3。高度なデバッグまたはフックシステム

一部のフレームワークまたはデバッグツールは$GLOBALSを使用して、検査のためにデータを注入するか、フックメカニズムを実装しています。たとえば、WordPress(物議を醸すものの)はグローバルな状態を広範囲に使用し、プラグインがそれと対話することがあります。

4。ランタイムパッチングまたはテスト(まれ)

非常に具体的なテストシナリオでは、ユニットテスト中のモンキーパッチのグローバル変数など、 $GLOBALS使用して、一時的に値を上書きすることができます。ただし、これは慎重に、そしてクリーンアップで行う必要があります。


ベストプラクティス(使用する必要がある場合)

$GLOBALS使用する必要がある場合は、次のガイドラインに従ってください。

  • ドキュメントの使用法は明確に:グローバル変数がアクセスされている理由を明らかにします。
  • グローバルを不必要に変更しないでください。可能な場合は、読み取り専用として扱います。
  • 新しいアプリケーションでコアロジックフローに$ Globalsを使用しないでください:依存関係注射を好みます。
  • 使用済みの使用法:ビジネスロジックの深いものではなく、ブートストラップまたは構成レイヤーにグローバルアクセスを維持します。

結論

$GLOBALS 、壊れたり廃止されたりするという意味では「遺物」ではありません。依然として機能しており、狭いにもかかわらず有効なユースケースを持っています。しかし、現代のPHP開発では、一般的に、より予測可能でテスト可能なパターンを支持してそれを避ける方が良いです。

それを遺物と呼ぶと、物事を単純化しすぎます。それは低レベルの機能であり、乱用が容易であり、よく構築されたアプリケーションで正当化するのが難しいと言う方が正確です。

いいえ、 $GLOBALS悪ではありません。しかし、あなたが明確で正当な理由を持っていない限り、あなたはおそらくそれなしでより良いでしょう。

基本的に:それを知って、理解し、それを使用しないことを選択します。

以上が$ Globals:歴史的な遺物または誤解されたツール?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

依存関係注入:$グローバルの優れた代替品 依存関係注入:$グローバルの優れた代替品 Aug 03, 2025 pm 03:56 PM

DependencyInjection(di)$ globalShidesthem.2.diimprovestestabilityの依存性による依存性の依存性の$ globalshidesthem.2.dieasyManipulatingglobalState.3.ductupeStightcouplingbydecoupなどの依存性を維持することで、依存性$ globals becaudeItmakesdependenciesexplicitの発行中心

$ Globals vs. `Global`キーワード:コアの違いを理解します $ Globals vs. `Global`キーワード:コアの違いを理解します Aug 04, 2025 pm 03:59 PM

$ GlobalsとGlobalはどちらも関数のグローバル変数にアクセスするために使用されますが、重要な違いがあります。1。$ Globalsは、$ Globals ['var']などのキー名を介して変数にアクセスするハイパーグローバルアレイです。 2. $ Globalsは事前宣言を必要とせず、直接使用することができます。グローバルは最初に宣言し、次に使用する必要があります。 3. $ Globalsは、$ Globals [$ varname]などの動的アクセスをサポートし、Globalは動的宣言をサポートしていません。 4.Unset($ Globals ['var'])はグローバル変数自体を削除しますが、Unset($ var)はグローバル$ vです

最新のPHPフレームワークが$ Globalsを廃止する理由 最新のPHPフレームワークが$ Globalsを廃止する理由 Aug 05, 2025 am 07:39 AM

ModernPhpframeworkslikelavalavelandsymfonyusedepentyinjectiontoEliminaterelianceon $ globalsbyinjectingdependenciesexplicty、改善可能性と測定のカップリング

グローバル国家の危険:PHPの$グローバルを避けるべき理由 グローバル国家の危険:PHPの$グローバルを避けるべき理由 Aug 03, 2025 am 04:14 AM

$ globalscreateShidDedendenciesを使用して、functionshardertotetest、壊れやすい、andunReusableを使用します

$ Globalsを介した未確認のグローバル状態のセキュリティリスク $ Globalsを介した未確認のグローバル状態のセキュリティリスク Aug 03, 2025 pm 04:20 PM

$ globalSallowsunintendedvariablewritingのチェックされていない、aTmingStrationCriticalDatalidSoridSorolosErolosErowSOROUTS Validation;

$ Globalsで覆われたユニットテストコードの悪夢 $ Globalsで覆われたユニットテストコードの悪夢 Aug 05, 2025 am 09:06 AM

$ Globalsを使用すると、単体テストが破壊され、隠された依存関係が導入され、テスト間の状態共有、混乱のある設定、分離が不十分で、シミュレートが困難になります。 2。ソリューションは次のとおりです。最初に保存してから、汚染を避けるためにグローバルな状態を復元します。 3. $ Globals Accessをサービスクラスにカプセル化し、依存関係の注入を通過して、テストでの模擬オブジェクトの使用を容易にします。 4.軽量の依存関係注入でさえ、テスト能力を大幅に改善する可能性があり、グローバル変数を直接読み取ることは避ける必要があります。 5.将来の問題を防ぐために、$ Globalsを無効にし、代わりに構成オブジェクト、依存関係噴射コンテナ、または環境変数を使用し、静的分析ツールを使用してハイパーグローバル変数の使用を検出します。最終的な答えは、$グローバルへの依存性をカプセル化と依存噴射を通じて徐々に排除する必要があります

$ Globalsの操作によって引き起こされるグローバルな状態のカオスのデバッグ $ Globalsの操作によって引き起こされるグローバルな状態のカオスのデバッグ Aug 03, 2025 pm 01:46 PM

$ globalsmanipulationcancusuasusunpredicablebugsinphp; todebugandresolveit、1。$ globalsprovidesglobalacesstoallvariables、makestatechangeshardtotrack;

地雷原のナビゲーション:$グローバルの合法的な(およびまれな)ユースケース 地雷原のナビゲーション:$グローバルの合法的な(およびまれな)ユースケース Aug 04, 2025 pm 02:10 PM

$ globalsMayBeAcceptableGACYSYSTEMSLIKEWORDPRESSPRUGINSWHEREITENSURESCOMPATIBILITYを使用する$を使用してください

See all articles