PHP の Trait の特性と機能を例とともに詳しく説明

墨辰丷
リリース: 2023-03-29 17:06:01
オリジナル
1372 人が閲覧しました

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の抽象クラスと抽象メソッドの概念と使用例の分析

PHPのクラスの継承と使用例の詳細な説明


php Web サイトのルート ディレクトリの物理パス 方法


以上がPHP の Trait の特性と機能を例とともに詳しく説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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