PHP 5.4.0 以降、PHP はトレイトと呼ばれるコード再利用の方法を実装しています。
Traits は、PHP のような単一継承言語用に用意されたコード再利用メカニズムです。トレイトは、単一継承言語の制約を軽減し、開発者が異なる階層内の独立したクラスでメソッド セットを自由に再利用できるように設計されています。特性とクラス構成のセマンティクスは、複雑さを軽減し、従来の多重継承とミックスインに関連する典型的な問題を回避する方法を定義します。
Trait はクラスに似ていますが、きめ細かく一貫した方法で機能を組み合わせるようにのみ設計されています。特性を単独でインスタンス化することはできません。これは、従来の継承に水平機能の組み合わせを追加します。つまり、アプリケーション クラスのメンバーを継承する必要がありません。
Trait は PHP5.4 で追加されたもので、インターフェイスでもクラスでもありません。主に単一継承言語の制限を解決するためです。これは、PHP における多重継承の解決策です。例えば、2 つの抽象クラスを同時に継承するのは非常に面倒ですが、Trait はこの問題を解決するために設計されています。 1 つ以上の既存のクラスに追加できます。これは、クラスが実行できること (そのインターフェイスの特性を示す) を宣言し、特定の実装 (そのクラスの特性を示す) も含みます。
関連学習の推奨事項: php プログラミング(ビデオ)
使いやすい
まず、もちろん、Trait を宣言します。PHP5.4 では、trait キーワード
trait first_trait { function first_method() { /* Code Here */ } function second_method() { /* Code Here */ } }# が追加されています。 # #同時に、クラスでトレイトを使用したい場合は、use キーワードを使用します。
class first_class { // 注意这行,声明使用 first_trait use first_trait; } $obj = new first_class(); // Executing the method from trait $obj->first_method(); // valid $obj->second_method(); // valid
複数のトレイトを使用します
trait first_trait { function first_method() { echo "method"; } } trait second_trait { function second_method() { echo "method"; } } class first_class { // now using more than one trait use first_trait, second_trait; } $obj= new first_class(); // Valid $obj->first_method(); // Print : method // Valid $obj->second_method(); // Print : method
特性間のネスト
のように特性を相互にネストすることもできます。
trait first_trait { function first_method() { echo "method"; } } trait second_trait { use first_trait; function second_method() { echo "method"; } } class first_class { // now using use second_trait; } $obj= new first_class(); // Valid $obj->first_method(); // Print : method // Valid $obj->second_method(); // Print : method
Trait の抽象メソッド
trait first_trait { function first_method() { echo "method"; } // 这里可以加入修饰符,说明调用类必须实现它 abstract public function second_method(); } class first_method { use first_trait; function second_method() { /* Code Here */ } }
特性の競合
複数の特性を同時に使用すると、必然的に競合が発生するため、解決する必要があります。 PHP5.4 では、構文の観点から関連するキーワード構文を導入しました: replaceof と as 使用方法については、trait first_trait { function first_function() { echo "From First Trait"; } } trait second_trait { // 这里的名称和 first_trait 一样,会有冲突 function first_function() { echo "From Second Trait"; } } class first_class { use first_trait, second_trait { // 在这里声明使用 first_trait 的 first_function 替换 // second_trait 中声明的 first_trait::first_function insteadof second_trait; } } $obj = new first_class(); // Output: From First Trait $obj->first_function();を参照してください。上記は Trait の基本的な使用方法の一部です。詳細については、公式マニュアルを参照してください。注意すべき点がいくつかあります。
:
Trait は、呼び出し元のクラスによって継承された親クラスのメソッドをオーバーライドします。
#単一のトレイトは複数のトレイトで構成できます
単一のクラスで複数のトレイトを使用できます
トレイトは修飾子をサポートしています。たとえば、 、final、static、abstract
特性間の競合を解決するには、 replaceof および as 演算子を使用できます。
プログラミング ビデオ
以上がPHP のトレイトの特徴と機能を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。