この記事では、自動ロードを容易にするために PHP に名前空間を追加する利点を主に紹介します。これで、必要な友達が参照できるようになります。
通常、PHP プロジェクトにはエントリ ファイル インデックスが 1 つしかありません。 .php では、通常、後でインスタンス化されるクラス ファイルを必要とする自動ロード関数をこのエントリ ファイルに記述します。例:
spl_autoload_register(function ($className) { require 'class/' . $className . '.php';});通过以上的代码,我们发现:在自动加载时,我们需要指定存放类的文件夹,以便找到相应的类。那么问题产生了。在引入命名空间之前:
私たちのプロジェクトディレクトリ
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 ; 。这样,我们在写自动加载的时候,就不用考虑将要加载的类在哪一个文件目录下了,只需要这样写:
spl_autoload_register(function ($class) { require $class . '.php';});因为我们在index.php中use了所用到的类的命名空间,自动加载函数会到相应的命名空间中去寻找类(上述代码中的$class就相当于是'controller\Controller'),而这些类中又需要实例化其他的类,因为这些类中也声明了use 其他类的命名空间 ;,所以自动加载函数又会去相应的命名空间中去require其他类。这样,我们就不会为加载类而发愁了,极大地解放了我们的编程负担。
相关推荐:
以上がPHP に名前空間を追加する利点は、自動ロードが容易になることです。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。