最新のPHPトレイトの使い方を詳しく解説

零下一度
リリース: 2023-03-07 21:08:01
オリジナル
1875 人が閲覧しました

簡単に言えば、クラスが基本クラスの属性とメソッドを統合したいが、他の基本クラスのメソッドも持ちたいという問題を解決するためにPHPで trait キーワードが使用されます。使用と合わせて。

この記事で紹介したPHPでのtraitsの使い方を見てみましょう

carName}\n"; } } class Person { public function eat() { echo "eat\n"; } } class Student extends Person { use Drive; public function study() { echo "study\n"; } } $student = new Student(); $student->study(); $student->eat(); $student->driving(); ?>
ログイン後にコピー

出力結果は以下の通りです:

study eat driving trait
ログイン後にコピー

上記の例では、Studentクラスはeatメソッドでpersonを継承しています。 Drive、運転方法、属性 carName を組み合わせます。

Trait、基底クラス、このクラスに同名のプロパティやメソッドがあった場合、最終的にどちらが保持されるのでしょうか?

hello(); $student->driving(); ?>
ログイン後にコピー

出力結果は次のとおりです:

hello student driving from drive
ログイン後にコピー

したがって、メソッドまたは属性が同じ名前を持つ場合、現在のクラスのメソッドがトレイトのメソッドをオーバーライドし、トレイトのメソッドが今度はクラスのメソッドをオーバーライドすると結論付けられます。基本クラス。

複数のトレイトを結合する場合は、トレイト名をカンマで区切ります:

use Trait1, Trait2;
ログイン後にコピー

複数のトレイトに同じ名前のメソッドまたはプロパティが含まれている場合はどうなりますか?その答えは、結合された複数の特性に同じ名前のプロパティまたはメソッドが含まれている場合、競合を解決するにはそれらを明示的に宣言する必要がある、そうしないと致命的なエラーが発生するということです。

ログイン後にコピー

出力結果は次のとおりです:

コードは次のとおりです:

PHP Fatal error: Trait method hello has not been applied, because there are collisions with other trait methods on Class1 in ~/php54/trait_3.php on line 20
ログイン後にコピー

競合を解決するには、代わりにメソッドを使用し、メソッドにエイリアスを与えます。具体的な使用法を参照してください。 コード:

hello(); $Obj1->hi(); echo "\n"; $Obj2 = new Class2(); $Obj2->hello(); $Obj2->hi(); $Obj2->hei(); $Obj2->hehe(); ?>
ログイン後にコピー
出力結果は次のとおりです:
Trait2::hello Trait1::hi Trait2::hello Trait1::hi Trait2::hi Trait1::hello
ログイン後にコピー

as キーワードには別の用途があり、メソッドの

アクセス制御

を変更することです:

Trait を Trait と組み合わせることもできます。 Trait は抽象メソッド、static

属性、および Static メソッドをサポートしています。テストコードは次のとおりです:

sayHello(); $Obj->sayWorld(); echo $Obj->getWorld() . "\n"; HelloWorld::doSomething(); $Obj->inc(); $Obj->inc(); ?>
ログイン後にコピー
出力結果は次のとおりです:
Hello World get World Doing something 1 2
ログイン後にコピー

以上が最新のPHPトレイトの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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