ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるTraitsの特徴と機能

PHPにおけるTraitsの特徴と機能

怪我咯
怪我咯オリジナル
2017-07-12 15:35:191339ブラウズ

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

、abstract

などの修飾子をサポートしています
トレイト間の競合を解決するために、

演算子

の代わりに使用できます

以上がPHPにおけるTraitsの特徴と機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。