ホームページ  >  記事  >  バックエンド開発  >  PHP自動読み込み例の詳細説明

PHP自動読み込み例の詳細説明

零下一度
零下一度オリジナル
2017-07-23 13:24:251722ブラウズ

PHP プロジェクトには、通常、エントリ ファイルindex.php が 1 つだけあります。通常、このエントリ ファイルに、将来インスタンス化されるクラス ファイルを必要とする自動ロード関数を記述します。例:

<span style='font-family: "courier new", courier; font-size: 14px'>spl_autoload_register(function ($className) {</span><br><span style='font-family: "courier new", courier; font-size: 14px'>    require 'class/' . $className . '.php';</span><br><span style='font-family: "courier new", courier; font-size: 14px'>});</span><br><br><span style='font-family: "Microsoft YaHei"; font-size: 14px'>通过以上的代码,我们发现:在自动加载时,我们需要指定存放类的文件夹,以便找到相应的类。那么问题产生了。</span><br><br><strong><span style="font-size: 18px; background-color: #339966">在引入命名空间之前:</span></strong>

私たちのプロジェクトディレクトリ

index.php

Controller.php

index.phpコントローラー ディレクトリでコントローラー クラスをインスタンス化し、このオブジェクトの model() メソッドを呼び出す必要があります。このメソッドは、モデル ディレクトリでモデル クラスをインスタンス化する必要があります。 Index.php を実行しましょう:

警告: require(controller/Model.php): ストリームを開けませんでした: そのようなファイルまたはディレクトリはありません

は、そのようなファイルまたはディレクトリが存在しないことを示すプロンプトを表示します。理由は非常に簡単です。PHP が new Model() を使用するとき、要求するコントローラー ディレクトリに自動的に移動するため、それが見つからないからです。

それでは、問題を解決するには自動ローディング関数をどのように記述すべきでしょうか?明らかに、「controller/」を「model/」に変更したり、ディレクトリに書き込まなかったりすると、正しくロードされません。したがって、名前空間を使用する利点が現れます。

引入命名空间之后:

index.php

Controller.php

Model.php

ファイルディレクトリをたどりますクラス内の別のクラスをインスタンス化する必要がある場合、IDE は use namespace を記述するのに役立ちます。このように、自動ローディングを記述するときに、ロードされるクラスがどのファイル ディレクトリにあるかを考慮する必要はありません。次のように記述するだけで済みます:

<span style='font-family: "courier new", courier; font-size: 14px'>spl_autoload_register(function ($class) {</span><br><span style='font-family: "courier new", courier; font-size: 14px'>    require $class . '.php';</span><br><span style='font-family: "courier new", courier; font-size: 14px'>});</span><br><br><span style='font-family: "Microsoft YaHei"; font-size: 14px'>因为我们在index.php中use了所用到的类的命名空间,自动加载函数会到相应的命名空间中去寻找类(上述代码中的$class就相当于是'controller\Controller'),而这些类中又需要实例化其他的类,因为这些类中也声明了use <em>其他类的命名空间 </em>;,所以自动加载函数又会去相应的命名空间中去require其他类。</span><br><br><span style='font-size: 16px; font-family: "Microsoft YaHei"'>这样,我们就不会为加载类而发愁了,极大地解放了我们的编程负担。</span>

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

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