ホームページ >バックエンド開発 >PHPチュートリアル >PHP 名前空間と自動読み込み
この記事では、PHP の名前空間と自動ロードについて説明します。これには、必要な友人が参照できるように共有します。ちょうど考えていました。
私たちの PHP は 5.3 で名前空間の概念を導入したことが判明しました (これが、ほとんどのフレームワークが 5.3 より前のバージョンをサポートしない理由の 1 つです)spl_autoload_register
日常生活と同じように、同じ名前の人がたくさんいます。これらの人々をどうやって見分けるのでしょうか?次に、ロゴをいくつか追加する必要があります。
「名前の衝突」という恥ずかしさを心配する必要がないように、職場をロゴとして使用するのが良さそうです。 名前空間の分類 [ ] 完全修飾名前空間new 百度\李彦宏(); // 限定类名new \百度\李彦宏(); // 完全限定类名
namespace 谷歌;new 百度\李彦宏(); // 谷歌\百度\李彦宏(实际结果)new \百度\李彦宏(); // 百度\李彦宏(实际结果)この例は、名前空間での修飾クラス名の使用と完全修飾クラス名の使用の違いを示しています。 (完全修飾クラス名 = 現在の名前空間 + 修飾クラス名)
/* 导入命名空间 */use 百度\李彦宏;new 李彦宏(); // 百度\李彦宏(实际结果)/* 设置别名 */use 百度\李彦宏 AS CEO;new CEO(); // 百度\李彦宏(实际结果)/* 任何情况 */new \百度\李彦宏();// 百度\李彦宏(实际结果)名前空間を使用すると、クラス名にプレフィックスが付加されるだけで、競合する可能性が低く、システムはクラス名を自動的にインポートしません。 ファイルがインポートされていない場合、システムは __autoload 関数をトリガーし、「クラスが見つかりません」エラーをスローする前に修飾されたクラス名をパラメーターとして渡します。 つまり、上記の例はすべて、関連ファイルを手動で導入した状況に基づいています。そうでない場合、システムは「クラス 'Baidu Robin Li' が見つかりません」というメッセージをスローします。 名前空間を導入した後、自動ロードが導入されました クラスの自動ロード クラスの自動ロードについては、以前 spl_autoload_register について説明したときに説明しました。今日は別の種類の
__autoload() について説明します
__autoload 関数はいつ呼び出されますか? php ファイル内で new キーワードを使用してオブジェクトをインスタンス化する場合、この php ファイル内でクラスが定義されていない場合、__autoload 関数がトリガーされます。このとき、クラスを定義する php ファイルを導入できます。 , インスタンス化は成功しました。 (注: インスタンス化する必要があるオブジェクトがこのファイル内でクラスの定義を見つけた場合、__autoload 関数はトリガーされません)
__autoload と spl_autoload_register の両方がspl_autoload_register が使用される場合、spl_autoload_register が優先されます
関連する推奨事項:php ダウンロード機能
以上がPHP 名前空間と自動読み込みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。