ThinkPHP 5.0 は、クラス ライブラリで複数の継承の問題を簡単に実装するための拡張メカニズムとして trait 関数 (PHP5.4+) の使用を開始しました。
Traits は、PHP のような単一継承言語用に用意されたコード再利用メカニズムです。トレイトは、単一継承言語の制約を軽減し、開発者が異なる階層内の独立したクラスでメソッド セットを自由に再利用できるように設計されています。特性とクラス構成のセマンティクスは、複雑さを軽減し、従来の多重継承とミックスインに関連する典型的な問題を回避する方法を定義します。
ただし、PHP5.4バージョンはトレイトの自動ロードをサポートしていないため、PHP5.4バージョンの場合はトレイトクラスライブラリを手動でインポートする必要があります。システムはトレイトを自動的にロードするためのヘルパー関数load_traitを提供します。 class library 、たとえば trait クラス ライブラリは次のように正しく導入できます。
namespace app\index\controller; load_trait('controller/Jump'); // 引入traits\controller\Jump class index { use \traits\controller\Jump; public function index() { $this->assign('name','value'); $this->show('index'); } }
PHP バージョンが 5.5 以降の場合は、load_trait 関数を省略して trait を導入できます。
namespace app\index\controller; class index { use \traits\controller\Jump; public function index() { } }
は、次のような複数の特性クラス ライブラリの導入を同時にサポートできます。
namespace app\index\controller; load_trait('controller/Other'); load_trait('controller/Jump'); class index { use \traits\controller\Other; use \traits\controller\Jump; public function index() { } }
または
namespace app\index\controller; load_trait('controller/Other'); load_trait('controller/Jump'); class index { use \traits\controller\Other,\traits\controller\Jump; public function index() { } }
を使用します。 システムは、主に controller と model クラスの拡張に使用される、いくつかのカプセル化された特性クラス ライブラリを提供します。 。これらのシステムの組み込み特性ライブラリのルート 名前空間 は、システムのキーワードとの競合を避けるために、特性の代わりに特性を使用します。
trait メソッドによって導入されたクラス ライブラリは、priority に注意する必要があります。基本クラスから継承されたメンバーは、trait によって挿入されたメンバーによってオーバーライドされます。優先順位は、現在のクラスのメンバーがトレイトのメソッドをオーバーライドし、トレイトが継承されたメソッドをオーバーライドすることです。
特性クラスは、クラス定数の定義をサポートしていません。特性で定義されたプロパティは、現在のクラスまたは継承されたクラスで再定義できません。
競合の解決
複数のトレイト ライブラリを 1 つのクラス ライブラリに導入できます。両方のトレイトが同じ名前のメソッドを定義している場合、競合が明示的に解決されないと致命的なエラーが発生します。
同じクラス内の複数の特性の名前の競合を解決するには、代わりに 演算子 を使用して、競合するメソッドのどれを使用するかを明示的に指定する必要があります。
上記のメソッドでは、他のメソッドを除外することのみが可能です。as 演算子は、競合するメソッドの 1 つを別の名前で導入できます。
トレイトの詳細については、PHP公式マニュアルを参照してください。
以上がthinkPHP5で導入されているトレイトのサンプルコードを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。