特性とは何ですか?
php はバージョン 5.4 から Trait 機能をサポートしています。これは Class クラスに非常に似ており、クラス内のすべての一般的な Trait 機能を実装できます。特性はクラスを置き換えるために使用されるのではなく、クラスに「混合」するために使用されます。トレイトは、単一継承言語の制限を軽減し、開発者が異なる階層内の独立したクラスでメソッド セットを自由に再利用できるように設計されています。 特性とクラス構成のセマンティクスは、複雑さを軽減し、従来の多重継承に関連する典型的な問題を回避する方法を定義します。たとえば、2 つの抽象クラスを同時に継承する必要がありますが、これは PHP 言語ではサポートされていない機能であり、この問題を解決できます。あるいは、継承クラスチェーンは、親クラスの特定の特性の継承からサブクラスを分離すると理解することもできます。これは、親クラスの特性を使用するときに Trait が存在する場合、最初に Trait のメンバーを呼び出すのと同等です。
トレイトの宣言
クラスを宣言するには、class キーワードを使用する必要があります。トレイトを宣言するには、通常、トレイト キーワードも使用する必要があります。 Trait は final、static、abstract などの修飾子をサポートしているため、Trait は抽象メソッドの使用、静的メソッドのクラス定義もサポートしており、もちろん属性も定義できます。ただし、Trait はクラスに混ぜて使用され、単独で使用できないため、クラスのように new を使用してインスタンス化することはできません。 Interface と Trait を比較すると、Trait の方が便利です。
Trait の簡単な宣言コードは以下の通りです:
<?php //使用 trait 关键字申明一个 Trait,需要php5.4以上的版本 trait dome{ public $a = true; //声明成员属性 static $b = 1; //使用 static 关键字声明静态变量 function method1(){ } //声明成员方法 abstract public function method2(); //加入抽象修饰符,说明调用类必须实现它 } ?>
Trait の基本的な使い方
Trait はクラスとは異なり、単独でオブジェクトをインスタンス化することができません。使用するクラス。これは、Trait 内のメンバーをクラスにコピーし、そのクラスを独自のメンバーと同じように使用することと同じです。 Traitをクラスで使いたい場合。 use キーワードを使用して特性をクラスに組み込む必要があります。
コードは次のとおりです:
<?php //使用 trait 关键字申明一个 Trait,有两个成员方法 trait dome{ function method1(){ } //声明成员方法 function method2(){ } //声明成员方法 } class dome1{ //申明一个类,类中混入 Trait use dome; //使用 use 关键字在类中使用 dome } $obj = new dome1(); //实例化 dome1 对象 $obj->method1(); // 通过 dome1 对象,直接调用混入类 dome1 的成员方法 method1 $obj->method2(); // 通过 dome1 对象,直接调用混入类 dome1 的成员方法 method2 ?>
上記の例では、dome のメンバーが use キーワードを通じて dome1 クラスに混合されています。また、複数の特性を一度に混合し、use キーワードを使用して一緒に使用することもできます。カンマで区切ることにより、use ステートメントに複数の特性をリストし、それらをすべてクラスに挿入できます。複数のトレイトを同時に使用すると、必ず競合が発生することに注意してください。 php5.4 では、構文の面から の代わりに関連キーワード構文 が導入されました。
サンプルコードは次のとおりです:
<?php //使用 trait 关键字申明一个 Trait,有两个成员方法 trait dome1 { function fun() { echo "第一个 Trait 中的 fun 方法"; } } trait dome2 //这里名称相同就会有冲突 { function fun() { echo "第二个 Trait 中的 fun 方法"; } } class dome{ use dome1,dome2{ // dome2 中申明 dome1::fun insteadof dome2; // 申明使用 dome1 中的 fun 替换 } } $obj = new dome(); $obj->fun(); // 输出第一个 Trait 中的 fun 方法 ?>
クラス内で use キーワードを使用して特性のメンバーをクラスに混合できるだけでなく、特性の use キーワードを使用してクラスのメンバーを混合することもできます。もう一つの特性。これにより、特性間の入れ子が形成されます。使用されるクラスに要件を強制するために、Traits は抽象メソッドの使用をサポートします。 Trait で実装する必要がある抽象メソッドを宣言した場合、それを使用するクラスは、抽象クラスを継承するのと同じように、最初にそのメソッドを実装し、クラス内に抽象メソッドを実装する必要があります。
詳しい使い方は公式マニュアルをご参照ください。ただし、Trait の学習を初めて開始するときは、次の重要な点を理解する必要があります: 1. Trait は呼び出し元クラスの親クラス メソッドをオーバーライドします。
2. 基本クラスから継承されたメンバーは、Trait によって挿入されたメンバーによってオーバーライドされます。優先順位は次のとおりです。現在のクラスのメンバーは特性メソッドをオーバーライドし、特性は継承されたメソッドをオーバーライドします。
3. 特性は、クラスのようにオブジェクトをインスタンス化するために new を使用できません。
4. 1 つの特性は複数の特性で構成されます。
5. 1 つのクラスで、use を使用して複数の Trait を導入できます。
6. Trait は、final、static、abstract などの修飾子をサポートします。
7. 特性間の競合を解決するには、 replaceof 演算子と as 演算子を使用できます。
8. as 構文を使用して、メソッドのアクセス制御を調整することもできます。
【おすすめ関連チュートリアル】
1.「
php.cn Dugu Jiijian (4) - PHP ビデオチュートリアル特性機能の宣言と使用スキル: 実装のコレクションコードを再利用するためのクラスメソッドPHP 実践ビデオチュートリアル以上が特性とは何ですか? PHP での Trait の宣言と使用上のヒントを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。