PHP OOP - 特性 (Traits)
PHP - 什麼是 Traits?
PHP 只支援單繼承:子類只能繼承自一個父類。
那麼,如果一個類需要繼承多個行為呢?OOP Traits 解決了這個問題。
Traits 用於宣告可以在多個類中使用的類方法。Traits 可以包含方法和抽象方法,這些方法可以在多個類中使用,並且方法可以具有任何訪問修飾符(public、private 或 protected)。
Traits 使用 trait
關鍵字宣告
語法
<?php
trait TraitName {
// 一些程式碼...
}
?>
要在類中使用 trait,請使用 use
關鍵字
語法
<?php
class MyClass {
use TraitName;
}
?>
我們來看一個例子
示例
<?php
trait message1 {
public function msg1() {
echo "OOP is fun! ";
}
}
class Welcome {
use message1;
}
$obj = new Welcome();
$obj->msg1();
?>
自己動手試一試 »
示例解釋
在這裡,我們聲明瞭一個 trait:message1。然後,我們建立了一個類:Welcome。該類使用了 trait,trait 中的所有方法都可以在該類中使用。
如果其他類需要使用 msg1() 函式,只需在這些類中使用 message1 trait。這減少了程式碼重複,因為不需要一次又一次地重新宣告相同的方法。
PHP - 使用多個 Traits
讓我們看另一個例子
示例
<?php
trait message1 {
public function msg1() {
echo "OOP is fun! ";
}
}
trait message2 {
public function msg2() {
echo "OOP reduces code duplication!";
}
}
class Welcome {
use message1;
}
class Welcome2 {
use message1, message2;
}
$obj = new Welcome();
$obj->msg1();
echo "<br>";
$obj2 = new Welcome2();
$obj2->msg1();
$obj2->msg2();
?>
自己動手試一試 »
示例解釋
在這裡,我們聲明瞭兩個 trait:message1 和 message2。然後,我們建立了兩個類:Welcome 和 Welcome2。第一個類(Welcome)使用了 message1 trait,第二個類(Welcome2)同時使用了 message1 和 message2 trait(多個 trait 用逗號分隔)。