PHP中的Trait方法
生活随笔
收集整理的這篇文章主要介紹了
PHP中的Trait方法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
<?php
/** 自 PHP 5.4.0 起,PHP 實現(xiàn)了一種代碼復用的方法,稱為 trait。* Trait 是為類似 PHP 的單繼承語言而準備的一種代碼復用機制。* Trait 為了減少單繼承語言的限制,使開發(fā)人員能夠自由地在不同層次結(jié)構(gòu)內(nèi)獨立的類中復用 method。* Trait 和 Class 組合的語義定義了一種減少復雜性的方式,避免傳統(tǒng)多繼承和 Mixin 類相關典型問題。Trait 和 Class 相似,但僅僅旨在用細粒度和一致的方式來組合功能。
無法通過 trait 自身來實例化。它為傳統(tǒng)繼承增加了水平特性的組合;
也就是說,應用的幾個 Class 之間不需要繼承。從基類繼承的成員會被 trait 插入的成員所覆蓋。優(yōu)先順序是來自當前類的成員覆蓋了 trait 的方法,而 trait 則覆蓋了被繼承的方法。* */
/*trait getinfo
{function gettype(){return "我是Trait中定義的gettype方法";}function getname(){return "我是Trait中定義的getname方法";}
}
class aa{use getinfo;public function gettype(){return "我是類aa中定義的gettype方法";}public function getname(){return "我是類aa中定義的getname方法";}
}
$aa=new aa();
echo $aa->gettype();//我是類aa中定義的方法
class bb extends aa{
}
$bb=new bb();
echo $bb->getname();//輸出:我是類aa中定義的getname方法*//*多個 trait ?*通過逗號分隔,在 use 聲明列出多個 trait,可以都插入到一個類中。* *//*trait Hello {public function sayHello() {echo 'Hello ';}
}trait World {public function sayWorld() {echo 'World';}
}class MyHelloWorld {use Hello, World;public function sayExclamationMark() {echo '!';}
}$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();//輸出:Hello World!*//*沖突的解決
如果兩個 trait 都插入了一個同名的方法,如果沒有明確解決沖突將會產(chǎn)生一個致命錯誤。為了解決多個 trait 在同一個類中的命名沖突,需要使用 insteadof 操作符來明確指定使用沖突方法中的哪一個。以上方式僅允許排除掉其它方法,as 操作符可以 為某個方法引入別名。 注意,as 操作符不會對方法進行重命名,也不會影響其方法。* */
/*trait A {public function smallTalk() {echo 'a';}public function bigTalk() {echo 'A';}
}trait B {public function smallTalk() {echo 'b';}public function bigTalk() {echo 'B';}
}class Talker {use A, B {B::smallTalk insteadof A;A::bigTalk insteadof B;}
}class Aliased_Talker {use A, B {B::smallTalk insteadof A;A::bigTalk insteadof B;B::bigTalk as talk;}
}*//*修改方法的訪問控制 ?* 使用 as 語法還可以用來調(diào)整方法的訪問控制** *//*trait HelloWorld
{public function sayHello(){echo 'Hello World!';}
}// 修改 sayHello 的訪問控制
class MyClass1
{use HelloWorld {sayHello as protected;}
}// 給方法一個改變了訪問控制的別名
// 原版 sayHello 的訪問控制則沒有發(fā)生變化
class MyClass2
{use HelloWorld {sayHello as private myPrivateHello;}public function __construct(){$this->myPrivateHello();//輸出:Hello World!}
}
$myclass2 = new MyClass2();*//*從 trait 來組成 trait ?* 正如 class 能夠使用 trait 一樣,其它 trait 也能夠使用 trait。* 在 trait 定義時通過使用一個或多個 trait,能夠組合其它 trait 中的部分或全部成員。* */
//Example #7 從 trait 來組成 trait
/*trait Hello {public function sayHello() {echo 'Hello ';}
}trait World {public function sayWorld() {echo 'World!';}
}trait HelloWorld {use Hello, World;
}class MyHelloWorld {use HelloWorld;
}
$MyHelloWorld=new MyHelloWorld();
$MyHelloWorld->sayHello();
$MyHelloWorld->sayWorld();*/
?>
原文地址:http://php.net/manual/zh/language.oop5.traits.php#language.oop5.traits.multiple
轉(zhuǎn)載于:https://www.cnblogs.com/yiweiyihang/p/8530948.html
總結(jié)
以上是生活随笔為你收集整理的PHP中的Trait方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MS15-035 EMF文件处理漏洞分析
- 下一篇: Mac Apache WebDav 服务