麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網(wǎng)站 > 建站經(jīng)驗(yàn) > 正文

PHP中的traits實(shí)現(xiàn)代碼復(fù)用使用實(shí)例

2024-04-25 20:34:11
字體:
供稿:網(wǎng)友

PHP5.4后新增traits實(shí)現(xiàn)代碼復(fù)用機(jī)制,Trait和類相似,但不能被實(shí)例化,無需繼承,只需要在類中使用關(guān)鍵詞use引入即可,可引入多個(gè)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會覆蓋繼承的方法,當(dāng)前類會覆蓋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)多個(gè)Trait沖突問題

如果沒有解決沖突,會產(chǎn)生致命錯(cuò)誤;

可用insteadof來明確使用沖突中哪一個(gè)方法;

可用as操作符將其中一個(gè)沖突方法另起名;

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; }

}

// 給方法一個(gè)改變了訪問控制的別名

// 原版 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ā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 九九精品在线观看视频 | 福利在线国产 | 亚洲欧美aⅴ | 精品少妇v888av | 久草在线视频首页 | 日韩色视频在线观看 | 毛片免费在线视频 | porno video hd 365hd| 日韩视频中文 | 成人福利免费在线观看 | 久久国产精品小视频 | 国产99久久精品一区二区300 | 久草在线综合网 | 久色精品视频 | 欧美成人高清视频 | 午夜伊人 | 欧美精品一区二区三区久久久 | 俄罗斯hdxxx| www.精品在线| 午夜小影院 | 国产在线1区 | 国产一国产精品一级毛片 | 久久成人在线观看 | 美国一级免费视频 | 亚洲国产二区 | 国产精品一区网站 | 激情视频在线播放 | 99爱福利视频在线观看 | 成人在线视频在线观看 | 男女视频免费看 | 天天夜天天操 | 精品中文一区 | 精品一区二区久久久久久按摩 | 看免费av | lutube成人福利在线观看污 | 黄色一级毛片免费看 | 羞羞视频免费网站 | 免费一级特黄做受大片 | 性 毛片| 欧美一级片在线 | 一区二区国产在线 |