ホームページ >バックエンド開発 >PHPチュートリアル >laravel-php 多くのフレームワークは名前空間を通じて関連クラスを直接インポートしますが、実際には名前空間にはその機能がありません。説明する

laravel-php 多くのフレームワークは名前空間を通じて関連クラスを直接インポートしますが、実際には名前空間にはその機能がありません。説明する

WBOY
WBOYオリジナル
2016-07-06 13:52:41935ブラウズ

多くの PHP フレームワークは、名前空間を通じて関連クラスを直接インポートしますが、実際には名前空間にはその機能がありません。説明してください

require_once include_once()...を使用してクラスをインポートします...

しかし、thinkphp、laravelなどの多くのフレームワークは、これらのメソッドを使用せず、名前空間を使用します

何が起こっているのですか?

返信内容:

多くの PHP フレームワークは、名前空間を通じて関連クラスを直接インポートしますが、実際には名前空間にはその機能がありません。説明してください

require_once include_once()...を使用してクラスをインポートします...

しかし、thinkphp、laravelなどの多くのフレームワークは、これらのメソッドを使用せず、名前空間を使用します

何が起こっているのですか?

他の 2 つの回答ではいくつかの点について言及していますが、十分ではありません

まずは自動読み込みの機能です

自動ロードは PHP5 で導入されました。spl_autoload_register注册一个自动加载函数, 当PHP在找一个内存中还不存在的类时, 就会依次调用spl_autoload_register登録された自動ロード関数を使用してクラスを検索できます

もう 1 つの方法としては、__autoload 関数をオーバーライドする方法がありますが、この方法では自動ロード関数を 1 つしか使用できません。他のライブラリも使用すると問題が発生する可能性があるため、お勧めできません。

コンポーザーに関しては、PSR のディレクトリ構成に従うコードを作成できる場合は、コンポーザーが提供するオートロード実装を直接使用することもできます。

注意すべき点は、自動読み込み機能は名前空間とは何の関係もありませんが、名前空間と一緒に使用することが推奨されていますが、一部の古い PHP コードでは、実際には

のアンダースコアを使用することで名前空間の効果が実現されていることがわかります。 _

はい、ただし、ロジック コードに直接記述されていません。あなたの質問については、php 自動読み込みとコンポーザー自動読み込みを検索してみてください。

名前空間の使用状況を確認できます use はクラスを導入するので、require_once include_once() を使う必要はありません...

実際には、 use は関数を導入するのではなく、プログラムが自動的に __autoload メソッドをロードし、関連するクラスを導入します。

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