国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP使用traits實現(xiàn)代碼復用

2019-11-08 01:56:59
字體:
供稿:網(wǎng)友

php5.4后新增traits實現(xiàn)代碼復用機制,Trait和類相似,但不能被實例化,無需繼承,只需要在類中使用關鍵詞use引入即可,可引入多個Traits,用','隔開。(1)Trait簡單使用

<?php trait A {    public $var1 = 'test1';    public function test1() {        echo 'trait A::test1()';    }} trait B {    public $var2 = 'test2';    public function test2() {        echo 'trait B::test2()';    }} class C {    use A,B;} $c = new C();echo $c->var1; //test1$c->test2(); //trait B::test2()(2)優(yōu)先級問題Trait會覆蓋繼承的方法,當前類會覆蓋Trait方法。
trait A {    public $var1 = 'test';    public function test() {        echo 'A::test()';    }    public function test1() {        echo 'A::test1()';    }} class B {    public function test() {        echo 'B::test()';    }    public function test1() {        echo 'B::test1()';    }}class C extends B{    use A;    public function test() {        echo 'c::test()';    }} $c = new C();$c->test(); //c::test()$c->test1(); //A::test1()(3)多個Trait沖突問題如果沒有解決沖突,會產(chǎn)生致命錯誤;可用insteadof來明確使用沖突中哪一個方法;可用as操作符將其中一個沖突方法另起名;
trait A {    public function test() {        echo 'A::test()';    }} trait B {    public function test() {        echo 'B::test()';    }} class C {    use A,B {        B::test insteadof A;        B::test as t;    }} $c = new C();$c->test(); //B::test()$c->t(); //B::test()   可以用as另起名(4)as可用來修改方法訪問控制
trait  HelloWorld  {    public function  sayHello () {        echo  'Hello World!' ;    }} // 修改 sayHello 的訪問控制class  A  {    use  HelloWorld  {  sayHello  as PRotected; }} // 給方法一個改變了訪問控制的別名// 原版 sayHello 的訪問控制則沒有發(fā)生變化class  B  {    use  HelloWorld  {  sayHello  as private  myPrivateHello ; }} $b = new A();$b->sayHello(); //Fatal error: Call to protected method A::sayHello() from context ''(5)Trait中使用Trait
trait A {    public function test1() {        echo 'test1';    }} trait B {    public function test2() {        echo 'test2';    }} trait C {    use A,B;} class D {    use C;} $d = new D();$d->test2();  //test2(6)Trait支持抽象方法、支持靜態(tài)方法、不可以直接定義靜態(tài)變量,但靜態(tài)變量可被trait方法引用。
trait A {    public function test1() {        static $a = 0;        $a++;        echo $a;    }     abstract public function test2(); //可定義抽象方法} class B {    use A;    public function test2() {     }} $b = new B();$b->test1(); //1$b->test1(); //2(7)Trait可定義屬性,但類中不能定義同樣名稱屬性
trait A {   public $test1;} class B {    use A;    public $test2;}

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜春市| 昭觉县| 富裕县| 莲花县| 宜兴市| 余庆县| 阿图什市| 老河口市| 济宁市| 万载县| 洛隆县| 台湾省| 顺平县| 岱山县| 自贡市| 易门县| 寻甸| 房产| 军事| 邛崃市| 望城县| 醴陵市| 莲花县| 维西| 道真| 姚安县| 伊川县| 阿拉尔市| 双柏县| 淮阳县| 都匀市| 华蓥市| 迁安市| 城步| 格尔木市| 晋城| 绥芬河市| 勐海县| 新巴尔虎右旗| 南华县| 新营市|