php trait是為類似PHP的單一繼承語言而準備的一種程式碼重複使用機制,Trait為了減少單一繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類別中復用method。
Trait
自PHP 5.4.0 起,PHP 實作了程式碼重複使用的方法,稱為trait。
Trait 是為類似 PHP 的單繼承語言而準備的程式碼重複使用機制。 Trait 為了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類別中重複使用 method。 Trait 和 Class 組合的語意定義了一種減少複雜性的方式,避免傳統多繼承和 Mixin 類別相關典型問題。
Trait 和 Class 相似,但只是旨在以細粒度和一致的方式來組合功能。無法透過 trait 自身來實例化。它為傳統繼承增加了水平特性的組合;也就是說,應用的幾個 Class 之間不需要繼承。
Example #1 Trait 範例
<?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ } class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */ } ?>
優先權 ¶
從基底類別繼承的成員會被 trait 插入的成員所覆寫。優先順序是來自目前類別的成員覆寫了 trait 的方法,而 trait 則覆寫了被繼承的方法。
Example #2 優先順序範例
從基底類別繼承的成員被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆寫。其行為 MyHelloWorld 類別中定義的方法一致。優先順序是目前類別中的方法會覆寫 trait 方法,而 trait 方法又覆寫了基底類別中的方法。
<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); ?>
以上程式會輸出:
Hello World!
Example #3 另一個優先順序的範例
<?php trait HelloWorld { public function sayHello() { echo 'Hello World!'; } } class TheWorldIsNotEnough { use HelloWorld; public function sayHello() { echo 'Hello Universe!'; } } $o = new TheWorldIsNotEnough(); $o->sayHello(); ?>
以上程式會輸出:
Hello Universe!
更多相關知識,請造訪PHP中文網!
以上是php trait是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!