php 5.3 以降、PHP には名前空間/遅延静的バインディング/ラムダ匿名関数などの主要な機能が追加されました
名前空間の参照により、PHP のコード構造の柔軟性と制御性がさらに向上し、コード構造のさまざまな側面を簡単に組み合わせることができます。プロジェクトのツールクラスは分類され、管理されます
各 PHP フレームワークは、ファイル パス マッピングと自動ロード機能に名前空間を使用します
まず、Yii2 のコントローラー記述ルールを見てみましょう
controllersIndexController.php
<?php /** * 自动载入机制 *///==========================================================================================//声明自己的命名空间 此命名空间下的类皆归属于此命名空间管理//==========================================================================================namespace app\controllers;//==========================================================================================//use 声明其实只是为 yii\web\Controller 定义一个别名:Controller 方便我们再上下文中使用//而并非像 C/C++的include JAVA的import将导入的文件加载进来(当然php为解释语言 不存在预编译这一步)//==========================================================================================use yii\web\Controller;//==========================================================================================//IndexController的完整类名其实为 app\controller\IndexController//Controller 为 yii\web\Controller php 解释到此点才会去加载此类//==========================================================================================class IndexController extends Controller { public function actionIndex() { //不使用 use 提前声明 手写完整的类名 $model = new \app\models\EntryForm();//注意当前上下文中存在命名空间 所以要从根命名空间 '\' 开始 }}?>
1. 特定の名前空間コンテキスト内の他の名前空間にあるクラスにアクセスする場合、別名として use を使用することも、このクラスの完全名を使用することもできます。 '' ルート名前空間で始まる必要があります。そうしないと、インタープリターは現在の名前空間コンテキストで呼び出しているとみなします。つまり、foobar メソッドは currentNamespace の foobar メソッドにロードされます
名前空間は Linux ファイルに非常に似ていますsystem、'' はルートを表し、ルートで始まらないものはすべて現在の名前空間に基づいているとみなされます
2. foobar を使用した後、new bar() は次のようになります。 new foobar() を使用して、異なる名前空間にある同じクラス名を持つクラスを同時に参照する場合、 as を使用して新しいエイリアスを定義することもできます
use foo\bar\sameName as classA;use bar\foo\sameName as classB;new classA(); // new \foo\bar\sameName;new classB(); // new \bar\foo\sameName;
3.エントリ ファイルのロード パラメータ設定を通じてアプリケーション本体を読み込み、ルーティング コンポーネントをロードし、リクエストを解析し、コントローラをディスパッチします。メソッドを呼び出すと、プロセス中に
use yii\web\Controller;
Yii2のエントリーファイルを見てみましょう アプリケーションエンティティ起動後の自動ロード機能の登録処理
index.php
自動ローディング関数がまだ登録されていないため、設定とシステムフレームワークをロードするときにエントリファイルはrequire呼び出しを使用します
Yiiブートストラップファイルをロードします 次に、spl_autoload_registerを通して自動ローディング関数を登録しました
Yii。 php
Yii2 のオートローディング関数
BaseYii に継承されているものは、名前空間タイプのクラス名に従ってこのクラスのクラス名をマッピングすることです
たとえば、yiiwebController クラスがマッピングされます。 yii に従って '/web/Controller.php' ファイルに追加し、このファイルは yiiwebController クラスにアクセスするためにロードします
自分で作成したコントローラーまたはモデルにアクセスします。 as 'appcontrollersIndexController' 'appmodelsEntryForm'