PHP 5.4.0 以降、PHP は traits と呼ばれるコード再利用メソッドを実装しています。
Trait は、PHP のような単一の 継承 言語用に用意されたコード再利用メカニズムです。トレイトは、単一継承言語の制限を軽減し、開発者が異なる階層内の独立したクラスでメソッドを自由に再利用できるように設計されています。 Trait と Class の組み合わせのセマンティクスは、複雑さを軽減し、従来の多重継承や Mixin クラスに関連する典型的な問題を回避する方法を定義します。
Trait はクラスに似ていますが、きめ細かく一貫した方法で機能を組み合わせるようにのみ設計されています。 トレイト自体を通じてインスタンス化することはできません。これにより、従来の継承に水平機能の組み合わせが追加されます。つまり、アプリケーション内の複数のクラス間の継承が必要なくなります。
Trait の例
まず、もちろん、PHP5.4 では Trait キーワードが追加されました
trait first_trait { function first_method() { /* Code Here */ } function second_method() { /* Code Here */ } }
同時に、クラスで Trait を使用したい場合は、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 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 では、構文面から関連するキーワード構文を導入しています。注意すべき点がいくつかあります:
Trait は、呼び出しクラスによって継承された親クラスのメソッドをオーバーライドします
Trait は、クラスのような new を使用してインスタンス化できません
1 つの Trait は複数の Traits で構成できます
In単一のクラスでは、複数のトレイトを使用できます
トレイトは、final、
static
などの修飾子をサポートしています
トレイト間の競合を解決するために、
以上がPHPにおけるTraitsの特徴と機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。