Trait
PHP - 什么是 Trait(特性)?
PHP 僅支持單繼承:一個(gè)子類只能從一個(gè)父類繼承。
那么,如果一個(gè)類需要繼承多個(gè)行為怎么辦?OOP 中的 Trait(特性)解決了這個(gè)問題。
Trait 用于聲明可以在多個(gè)類中使用的方法。Trait 可以有方法和抽象方法,這些方法可以在多個(gè)類中使用,并且這些方法可以有任何訪問修飾符(public、private 或 protected)。
Trait 使用 trait
關(guān)鍵字聲明:
語法
<?php trait TraitName { // 一些代碼... } ?>
要在類中使用 trait,請(qǐng)使用 use 關(guān)鍵字:
語法
<?php class MyClass { use TraitName; } ?>
讓我們看一個(gè)例子:
實(shí)例
<?php trait message1 { public function msg1() { echo "OOP is fun! "; } } class Welcome { use message1; } $obj = new Welcome(); $obj->msg1(); ?>運(yùn)行實(shí)例 ?
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
例子解釋
在這里,我們聲明了一個(gè) trait:message1
。然后,我們創(chuàng)建了一個(gè)類:Welcome
。該類使用了這個(gè) trait,trait 中的所有方法都將在該類中可用。
如果其他類需要使用 讓我們?cè)倏匆粋€(gè)例子: 點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例 在這里,我們聲明了兩個(gè) trait:msg1()
函數(shù),只需在這些類中使用 message1
trait 即可。這減少了代碼重復(fù),因?yàn)椴恍枰槐橛忠槐榈刂匦侣暶飨嗤姆椒ā?/p>
PHP - 使用多個(gè) Trait
實(shí)例
<?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();
?>
運(yùn)行實(shí)例 ?例子解釋
message1
和 message2
。然后,我們創(chuàng)建了兩個(gè)類:Welcome
和 Welcome2
。第一個(gè)類(Welcome)使用了 message1
trait,而第二個(gè)類(Welcome2
)使用了 message1
和 message2
兩個(gè) trait(多個(gè) trait 之間用逗號(hào)分隔)。