PHPのTraitsの機能は何ですか?

伊谢尔伦
伊谢尔伦オリジナル
2017-07-03 11:16:221536ブラウズ

Traitsは、PHPのような単一の継承言語用に用意されたコード再利用メカニズムです。特性 単一継承言語の制限を軽減するために、開発者は異なる階層内の独立したクラスでメソッド セットを自由に再利用できます

PHP 5.4.0 以降、PHP は traits と呼ばれるコード再利用のメソッドを実装しました。

Traits は、PHP のような単一継承言語用に用意されたコード再利用メカニズムです。トレイトは、単一継承言語の制約を軽減し、開発者が異なる階層内の独立したクラスでメソッド セットを自由に再利用できるように設計されています。特性とクラス構成のセマンティクスは、複雑さを軽減し、従来の多重継承とミックスインに関連する典型的な問題を回避する方法を定義します。

Trait はクラスに似ていますが、きめ細かく一貫した方法で機能を組み合わせるようにのみ設計されています。特性を単独でインスタンス化することはできません。これは、従来の継承に水平機能の組み合わせを追加します。つまり、アプリケーション クラスのメンバーを継承する必要がありません。

Trait は PHP5.4 で追加されたもので、インターフェイスでもクラスでもありません。主に単一継承言語の制限を解決するためです。これは、PHP における多重継承の解決策です。たとえば、2 つの抽象クラスを同時に継承するのは非常に面倒です。Trait はこの問題を解決するように設計されています。 1 つ以上の既存のクラスに追加できます。クラスが実行できることを宣言し (インターフェイスの特性を示し)、特定の実装も含めます (クラスの特性を示します)

使い方は簡単

まず最初に、もちろん、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 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 までご連絡ください。