ホームページ  >  記事  >  バックエンド開発  >  PHPのTraitの特徴と使い方を紹介(コード付き)

PHPのTraitの特徴と使い方を紹介(コード付き)

不言
不言オリジナル
2018-08-03 11:33:171661ブラウズ

この記事ではPHPにおけるTraitの特徴と使い方(コード付き)を紹介していますので、参考になると思いますので、困っている方は参考にしていただければ幸いです。

PHP5.4.0 以降、PHP は traits と呼ばれるコード再利用の方法を実装しました。
Traits は、PHP のような単一継承言語用に用意されたコード再利用メカニズムです。トレイトは、単一継承言語の制約を軽減し、開発者が異なる階層内の独立したクラスでメソッド セットを自由に再利用できるように設計されています。特性とクラス構成のセマンティクスは、複雑さを軽減し、従来の多重継承とミックスインに関連する典型的な問題を回避する方法を定義します。
Trait はクラスに似ていますが、きめ細かく一貫した方法で機能を組み合わせるようにのみ設計されています。特性を単独でインスタンス化することはできません。これは、従来の継承に水平機能の組み合わせを追加します。つまり、アプリケーション クラスのメンバーを継承する必要がありません。
Trait は PHP5.4 で追加されたもので、インターフェイスでもクラスでもありません。主に単一継承言語の制限を解決するためです。これは、PHP における多重継承の解決策です。例えば、2 つの抽象クラスを同時に継承するのは非常に面倒ですが、Trait はこの問題を解決するために設計されています。 1 つ以上の既存のクラスに追加できます。これは、クラスが実行できることを宣言し (そのインターフェイスの特性を示します)、特定の実装も含まれています (そのクラスの特性を示します)
簡単な使い方
まず最初に、もちろん、PHP5.4 で追加されたトレイトを宣言します。キーワード

trait first_trait {
function first_method() { /* Code Here */ }
function second_method() { /* Code Here */ }
}

同時に、この特性をクラスで使用する場合は、キーワード

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 之间的嵌套
同时,Trait 之间也可以相互的嵌套,例如
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 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 の基本的な使用法の一部です。詳細については、を参照してください。公式マニュアル。注意すべき点がいくつかあります。
特性は、呼び出し側クラスによって継承された親クラスのメソッドをオーバーライドします。
特性は、クラスなどの new を使用してインスタンス化できません。
単一の特性は複数の特性で構成できます。
単一の Class では、複数の Traits を使用できます。
Trait は、final、static、abstract などの修飾子をサポートしています。
Trait 間の競合を解決するために、演算子の代わりに と を使用できます

推奨関連記事:

php でファイルを操作するさまざまな方法のまとめ (コード付き)

php でネイティブ zip テストを実装する方法 (純粋なコード)

以上がPHPのTraitの特徴と使い方を紹介(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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