PHP 名前空間と自動読み込み

不言
リリース: 2023-03-24 11:18:01
オリジナル
1705 人が閲覧しました

この記事では、PHP の名前空間と自動ロードについて説明します。これには、必要な友人が参照できるように共有します。ちょうど考えていました。

コードを書くとき、別のファイル内の他のクラスを呼び出すたびに

このメソッドを書きませんか?では、どうやってそれを達成したのでしょうか?

原則


私たちの PHP は 5.3 で名前空間の概念を導入したことが判明しました (これが、ほとんどのフレームワークが 5.3 より前のバージョンをサポートしない理由の 1 つです)spl_autoload_register

誰もがまだ名前空間について何かを知っています: 私は知りません

隅に行って考えてください

つまり、名前空間は一種の識別子であり、その主な目的は名前の競合の問題を解決することです。

日常生活と同じように、同じ名前の人がたくさんいます。これらの人々をどうやって見分けるのでしょうか?次に、ロゴをいくつか追加する必要があります。

「名前の衝突」という恥ずかしさを心配する必要がないように、職場をロゴとして使用するのが良さそうです。

名前空間の分類

[ ] 完全修飾名前空間
  • [ ] 修飾された名前空間

  • new 百度\李彦宏(); // 限定类名new \百度\李彦宏(); // 完全限定类名
    ログイン後にコピー
  • 現在の名前空間が宣言されていない場合、修飾クラス名と完全修飾クラス名は同等です。スペースを指定しないと、デフォルトで global() が使用されるためです。

    namespace 谷歌;new 百度\李彦宏(); // 谷歌\百度\李彦宏(实际结果)new \百度\李彦宏(); // 百度\李彦宏(实际结果)
    ログイン後にコピー

    この例は、名前空間での修飾クラス名の使用と完全修飾クラス名の使用の違いを示しています。 (完全修飾クラス名 = 現在の名前空間 + 修飾クラス名)
  • /* 导入命名空间 */use 百度\李彦宏;new 李彦宏(); // 百度\李彦宏(实际结果)/* 设置别名 */use 百度\李彦宏 AS CEO;new CEO(); // 百度\李彦宏(实际结果)/* 任何情况 */new \百度\李彦宏();// 百度\李彦宏(实际结果)
    ログイン後にコピー
名前空間を使用すると、クラス名にプレフィックスが付加されるだけで、競合する可能性が低く、システムはクラス名を自動的にインポートしません。

ファイルがインポートされていない場合、システムは __autoload 関数をトリガーし、「クラスが見つかりません」エラーをスローする前に修飾されたクラス名をパラメーターとして渡します。

つまり、上記の例はすべて、関連ファイルを手動で導入した状況に基づいています。そうでない場合、システムは「クラス 'Baidu Robin Li' が見つかりません」というメッセージをスローします。

名前空間を導入した後、自動ロードが導入されました

クラスの自動ロード

クラスの自動ロードについては、以前 spl_autoload_register について説明したときに説明しました。今日は別の種類の

__autoload() について説明します

PHP の __autoload 関数は魔法の関数です。この関数が登場する前は、php ファイル内で 100 個のオブジェクトが参照されている場合、ファイルは include または require to を使用する必要がありました。 100 個のクラス ファイルを導入すると、php ファイルが非常に大きくなります。そこで、この __autoload 関数があります。

__autoload 関数はいつ呼び出されますか? php ファイル内で new キーワードを使用してオブジェクトをインスタンス化する場合、この php ファイル内でクラスが定義されていない場合、__autoload 関数がトリガーされます。このとき、クラスを定義する php ファイルを導入できます。 , インスタンス化は成功しました。 (注: インスタンス化する必要があるオブジェクトがこのファイル内でクラスの定義を見つけた場合、__autoload 関数はトリガーされません)

それと spl_autoload_register の違いは、

__autoload と spl_autoload_register の両方がspl_autoload_register が使用される場合、spl_autoload_register が優先されます

関連する推奨事項:

php ダウンロード機能

PHP の印刷の問題

PHP 名前空間について

以上がPHP 名前空間と自動読み込みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!