thinkphp5.0ネーミングスペース
10204 ワード
ネーミングスペース
ThinkPHPはネーミングスペース方式でクラスライブラリファイルを定義し自動ロードし、マルチモジュールとComponentクラスライブラリ間のネーミングスペース衝突問題を効果的に解決し、より効率的なクラスライブラリ自動ロードメカニズムを実現した.
ネーミングスペースの基本概念がわからない場合は、PHPマニュアル:PHPネーミングスペース
特に、PHPに内蔵されているクラスライブラリを呼び出す必要がある場合、または第三者がネーミングスペースを使用していないクラスライブラリを呼び出す必要がある場合は、クラスライブラリをインスタンス化するときに
ThinkPHP
たとえば、
クラスをインスタンス化すると、次のようになります.
システムは、
5.0デフォルトのディレクトリ仕様は小文字で、クラスファイルの名前はアルパカ法で、頭文字は大文字です.
原則として、ネーミングスペースの定義とディレクトリが一致する限り、アルパカ法で命名されたディレクトリをサポートできます.たとえば、次のようになります.
我々はインスタンス化
ルートネーミングスペース(クラスライブラリパッケージ)
ルートネーミングスペースは重要な概念であり、上の
システムに組み込まれているいくつかのルートネーミングスペース(クラスライブラリパッケージ)は、次のとおりです.
名前
説明
クラスライブラリディレクトリ
think
システムコアクラスライブラリ
thinkphp/library/think
traits
システムTraitクラスライブラリ
thinkphp/library/traits
app
クラスライブラリの適用
application
新しいルートネーミングスペースを追加する必要がある場合は、2つの方法があります.新しいルートネーミングスペースを登録するか、
このマニュアルのサンプルコードは、簡潔化のため、指定されたクラスライブラリのネーミングスペースがない場合は、
自動登録
私たちは自分のクラスライブラリパッケージディレクトリを
インスタンス化と呼び出しを直接行うことができます.
アプリケーション・エントリ・ファイルで
では、
手動登録
手動で登録することで、新しいルートネーミングスペースを登録することもできます.たとえば、次のようにします.
アプリケーション・エントリ・ファイルに次のコードを追加します.
複数のルートネーミングスペースを同時に登録する場合は、次の操作を行います.
アプリケーションのプロファイルに直接構成を追加することもでき、アプリケーションが実行されると自動的に登録されます.
クラスライブラリパッケージの適用
クラスファイルは
クラスファイルは
appルートのネーミングスペースが適切でないか、競合していると判断した場合は、アプリケーションプロファイルで変更できます.
定義後、クラスライブラリの名前空間を次のように変更します.
ネームスペースエイリアス
フレームワークでは、名前空間に別名を定義できます.たとえば、次のようになります.
コントローラで呼び出す方法は次のとおりです.
アプリケーション・パブリック・ファイルに名前空間別名を登録すると、次のようになります.
では、上記のコントローラコードを次のように変更できます.
このマニュアルの後続の章は、PHPのネーミングスペースを知っている上で、自分でPHPの基礎を補充してください.そうしないと、後続のドキュメントとThinkPHP 5にいます.0の学習過程で、ネーミングスペースの理解不足が最大の学習障害になります.
転載先:https://www.cnblogs.com/chinalorin/p/5828434.html
ThinkPHPはネーミングスペース方式でクラスライブラリファイルを定義し自動ロードし、マルチモジュールとComponentクラスライブラリ間のネーミングスペース衝突問題を効果的に解決し、より効率的なクラスライブラリ自動ロードメカニズムを実現した.
ネーミングスペースの基本概念がわからない場合は、PHPマニュアル:PHPネーミングスペース
特に、PHPに内蔵されているクラスライブラリを呼び出す必要がある場合、または第三者がネーミングスペースを使用していないクラスライブラリを呼び出す必要がある場合は、クラスライブラリをインスタンス化するときに
\
を追加してください.たとえば、次のようにします.//
$class = new stdClass();
$xml = new SimpleXmlElement($xmlstr); // $class = new \stdClass(); $xml = new \SimpleXmlElement($xmlstr);
ThinkPHP
5.0
では、クラスライブラリに存在するネーミングスペースを正しく定義し、ネーミングスペースのパスがクラスライブラリファイルのディレクトリと一致するだけで、クラスの自動ロードを実現し、真の不活性ロードを実現することができる.たとえば、
\think\cache\driver\File
クラスは次のように定義されます.namespace think\cache\driver;
class File { }
クラスをインスタンス化すると、次のようになります.
$class = new \think\cache\driver\File();
システムは、
thinkphp/library/think/cache/driver/File.php
のパスを持つクラスファイルを自動的にロードします.5.0デフォルトのディレクトリ仕様は小文字で、クラスファイルの名前はアルパカ法で、頭文字は大文字です.
原則として、ネーミングスペースの定義とディレクトリが一致する限り、アルパカ法で命名されたディレクトリをサポートできます.たとえば、次のようになります.
我々はインスタンス化
$class = new \Think\Cache\Driver\File();
thinkphp/library/Think/Cache/Driver/File.php
ファイルが自動的にロードされます.ルートネーミングスペース(クラスライブラリパッケージ)
ルートネーミングスペースは重要な概念であり、上の
\think\cache\driver\File
クラスを例にとると、think
はルートネーミングスペースであり、その対応する初期ネーミングスペースディレクトリはシステムのクラスライブラリディレクトリ(thinkphp/library/think
)であり、ルートネーミングスペースがクラスライブラリパッケージに対応していることを簡単に理解することができる.システムに組み込まれているいくつかのルートネーミングスペース(クラスライブラリパッケージ)は、次のとおりです.
名前
説明
クラスライブラリディレクトリ
think
システムコアクラスライブラリ
thinkphp/library/think
traits
システムTraitクラスライブラリ
thinkphp/library/traits
app
クラスライブラリの適用
application
新しいルートネーミングスペースを追加する必要がある場合は、2つの方法があります.新しいルートネーミングスペースを登録するか、
EXTEND_PATH
ディレクトリ(自動登録)を入れます.このマニュアルのサンプルコードは、簡潔化のため、指定されたクラスライブラリのネーミングスペースがない場合は、
think
ネーミングスペースを指します.たとえば、次のコードです.Route::get('hello','index/hello');
use think\Route
または\think\Route::get('hello','index/hello');
自動登録
私たちは自分のクラスライブラリパッケージディレクトリを
EXTEND_PATH
ディレクトリ(extend
、構成可能)に入れるだけで、対応するネーミングスペースを自動的に登録することができます.例えば、次のようにします.extend
ディレクトリの下にmy
ディレクトリを追加し、\my\Test
クラスを定義します(クラスファイルはextend/my/Test.php
にあります).namespace my;
class Test { public function sayHello() { echo 'hello'; } }
インスタンス化と呼び出しを直接行うことができます.
$Test = new \my\Test();
$Test->sayHello();
アプリケーション・エントリ・ファイルで
EXTEND_PATH
定数を再定義した場合、\my\Test
クラスのファイルの場所を変更することもできます.たとえば、次のようにします.define('EXTEND_PATH','../vendor/');
では、
\my\Test
クラスのファイルの位置は/vendor/my/File.php
になります.手動登録
手動で登録することで、新しいルートネーミングスペースを登録することもできます.たとえば、次のようにします.
アプリケーション・エントリ・ファイルに次のコードを追加します.
\think\Loader::addNamespace('my','../application/extend/my/');
複数のルートネーミングスペースを同時に登録する場合は、次の操作を行います.
\think\Loader::addNamespace([ 'my' => '../application/extend/my/', 'org' => '../application/extend/org/', ]);
アプリケーションのプロファイルに直接構成を追加することもでき、アプリケーションが実行されると自動的に登録されます.
'root_namespace' => [
'my' => '../application/extend/my/',
'org' => '../application/extend/org/', ]
クラスライブラリパッケージの適用
Composer
に自動的にロードされたクラスライブラリと競合することを回避するために、アプリケーションクラスライブラリのネーミングスペースのルートは、app
に統一されています.たとえば、次のようになります.namespace app\index\model;
class User extends \think\Model { }
クラスファイルは
application/index/model/User.php
にあります.namespace app\admin\Event;
class User { }
クラスファイルは
application/admin/event/User.php
にあります.appルートのネーミングスペースが適切でないか、競合していると判断した場合は、アプリケーションプロファイルで変更できます.
'app_namespace' => 'application',
定義後、クラスライブラリの名前空間を次のように変更します.
namespace application\index\model;
class User extends \think\Model { }
ネームスペースエイリアス
フレームワークでは、名前空間に別名を定義できます.たとえば、次のようになります.
namespace app\index\model;
use think\Model;
class User extends Model { }
コントローラで呼び出す方法は次のとおりです.
namespace app\index\controller;
use app\index\model\User; class Index { public function index() { $user = new User(); } }
アプリケーション・パブリック・ファイルに名前空間別名を登録すると、次のようになります.
\think\Loader::addNamespaceAlias('model','app\index\model');
では、上記のコントローラコードを次のように変更できます.
namespace app\index\controller;
use model\User; class Index { public function index() { $user = new User(); } }
このマニュアルの後続の章は、PHPのネーミングスペースを知っている上で、自分でPHPの基礎を補充してください.そうしないと、後続のドキュメントとThinkPHP 5にいます.0の学習過程で、ネーミングスペースの理解不足が最大の学習障害になります.
転載先:https://www.cnblogs.com/chinalorin/p/5828434.html