PHP のトレイトの特徴と機能を理解する

coldplay.xixi
リリース: 2023-04-09 13:28:02
転載
2005 人が閲覧しました

PHP のトレイトの特徴と機能を理解する

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 で実装する必要がある抽象メソッドを宣言できるため、それを使用するクラスがそれを実装する必要があります

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 は、呼び出し元のクラスによって継承された親クラスのメソッドをオーバーライドします。


Trait は、Class## のような new を使用してインスタンス化できません。


#単一のトレイトは複数のトレイトで構成できます


単一のクラスで複数のトレイトを使用できます


トレイトは修飾子をサポートしています。たとえば、 、final、static、abstract


特性間の競合を解決するには、 replaceof および as 演算子を使用できます。

関連学習の推奨事項:
プログラミング ビデオ

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

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート