亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

詳解PHP中的Traits

2024-04-25 20:40:21
字體:
來源:轉載
供稿:網友

PHP是單繼承的語言,在PHP 5.4 Traits出現之前,PHP的類無法同時從兩個基類繼承屬性或方法。php的Traits和Go語言的組合功能類似,通過在類中使用use關鍵字聲明要組合的Trait名稱,而具體某個Trait的聲明使用trait關鍵詞,Trait不能直接實例化。具體用法請看下面的代碼:

<?php

trait Drive {

public $carName = 'trait';

public function driving() {

echo "driving {$this->carName}/n";

}

}

class Person {

public function eat() {

echo "eat/n";

}

}

class Student extends Person {

use Drive;

public function study() {

echo "study/n";

}

}

$student = new Student();

$student->study();

$student->eat();

$student->driving();

輸出結果如下:

study

eat

driving trait

上面的例子中,Student類通過繼承Person,有了eat方法,通過組合Drive,有了driving方法和屬性carName。

如果Trait、基類和本類中都存在某個同名的屬性或者方法,最終會保留哪一個呢?通過下面的代碼測試一下:

<?php

trait Drive {

public function hello() {

echo "hello drive/n";

}

public function driving() {

echo "driving from drive/n";

}

}

class Person {

public function hello() {

echo "hello person/n";

}

public function driving() {

echo "driving from person/n";

}

}

class Student extends Person {

use Drive;

public function hello() {

echo "hello student/n";

}

}

$student = new Student();

$student->hello();

$student->driving();

輸出結果如下:

hello student

driving from drive

因此得出結論:當方法或屬性同名時,當前類中的方法會覆蓋 trait的 方法,而 trait 的方法又覆蓋了基類中的方法。

如果要組合多個Trait,通過逗號分隔 Trait名稱:

use Trait1, Trait2;

如果多個Trait中包含同名方法或者屬性時,會怎樣呢?答案是當組合的多個Trait包含同名屬性或者方法時,需要明確聲明解決沖突,否則會產生一個致命錯誤。

<?php

trait Trait1 {

public function hello() {

echo "Trait1::hello/n";

}

public function hi() {

echo "Trait1::hi/n";

}

}

trait Trait2 {

public function hello() {

echo "Trait2::hello/n";

}

public function hi() {

echo "Trait2::hi/n";

}

}

class Class1 {

use Trait1, Trait2;

}

輸出結果如下:

PHP Fatal error: Trait method hello has not been applied, because there are collisions with other trait methods on Class1 in ~/php54/trait_3.php on line 20

使用insteadof和as操作符來解決沖突,insteadof是使用某個方法替代另一個,而as是給方法取一個別名,具體用法請看代碼:

<?php

trait Trait1 {

public function hello() {

echo "Trait1::hello/n";

}

public function hi() {

echo "Trait1::hi/n";

}

}

trait Trait2 {

public function hello() {

echo "Trait2::hello/n";

}

public function hi() {

echo "Trait2::hi/n";

}

}

class Class1 {

use Trait1, Trait2 {

Trait2::hello insteadof Trait1;

Trait1::hi insteadof Trait2;

}

}

class Class2 {

use Trait1, Trait2 {

Trait2::hello insteadof Trait1;

Trait1::hi insteadof Trait2;

Trait2::hi as hei;

Trait1::hello as hehe;

}

}

$Obj1 = new Class1();

$Obj1->hello();

$Obj1->hi();

echo "/n";

$Obj2 = new Class2();

$Obj2->hello();

$Obj2->hi();

$Obj2->hei();

$Obj2->hehe();

輸出結果如下:

Trait2::hello

Trait1::hi

Trait2::hello

Trait1::hi

Trait2::hi

Trait1::hello

as關鍵詞還有另外一個用途,那就是修改方法的訪問控制:

<?php

trait Hello {

public function hello() {

echo "hello,trait/n";

}

}

class Class1 {

use Hello {

hello as protected;

}

}

class Class2 {

use Hello {

Hello::hello as private hi;

}

}

$Obj1 = new Class1();

$Obj1->hello(); # 報致命錯誤,因為hello方法被修改成受保護的

$Obj2 = new Class2();

$Obj2->hello(); # 原來的hello方法仍然是公共的

$Obj2->hi(); # 報致命錯誤,因為別名hi方法被修改成私有的

Trait 也能組合Trait,Trait中支持抽象方法、靜態屬性及靜態方法,測試代碼如下:

<?php

trait Hello {

public function sayHello() {

echo "Hello/n";

}

}

trait World {

use Hello;

public function sayWorld() {

echo "World/n";

}

abstract public function getWorld();

public function inc() {

static $c = 0;

$c = $c + 1;

echo "$c/n";

}

public static function doSomething() {

echo "Doing something/n";

}

}

class HelloWorld {

use World;

public function getWorld() {

return 'get World';

}

}

$Obj = new HelloWorld();

$Obj->sayHello();

$Obj->sayWorld();

echo $Obj->getWorld() . "/n";

HelloWorld::doSomething();

$Obj->inc();

$Obj->inc();

輸出結果如下:

Hello

World

get World

Doing something

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩另类在线| 久久九九全国免费精品观看| 亚洲精品久久久久中文字幕二区| 亚洲bt天天射| 久久精彩免费视频| 91经典在线视频| 在线成人一区二区| 国内精品400部情侣激情| 亚洲无亚洲人成网站77777| 久久久久久中文字幕| 91精品国产乱码久久久久久久久| 日产精品久久久一区二区福利| 国产精品美女久久久久久免费| 日韩亚洲精品视频| 久久69精品久久久久久国产越南| 91网在线免费观看| 亚洲成人免费在线视频| 欧美视频不卡中文| 伊人精品在线观看| 久久91亚洲精品中文字幕奶水| 最近2019中文字幕第三页视频| 日韩欧美亚洲一二三区| 97视频在线观看网址| 成人免费视频在线观看超级碰| 自拍偷拍亚洲欧美| 色综合老司机第九色激情| 91精品国产91久久久久久最新| 欧美中文在线观看国产| 国产激情视频一区| 亚洲丝袜一区在线| 亚洲精品乱码久久久久久金桔影视| 久久久这里只有精品视频| 亚洲xxx大片| 亚洲国产精品999| 国语自产偷拍精品视频偷| 91免费高清视频| 国产ts一区二区| 久久久国产一区二区三区| 亚洲美女在线观看| 国产精品91久久久| 欧美激情国内偷拍| 黄网站色欧美视频| 91在线视频九色| 亚洲性夜色噜噜噜7777| 色婷婷成人综合| 亚洲成人网在线观看| 欧美黄色成人网| 日韩有码在线视频| 亚洲国产成人精品一区二区| 91久久中文字幕| 亚洲精品视频免费| 国产欧美日韩丝袜精品一区| 欧美日韩中文字幕| 国产91精品不卡视频| 国产91精品久久久久久| 国产91久久婷婷一区二区| 精品精品国产国产自在线| 色噜噜亚洲精品中文字幕| 538国产精品视频一区二区| 国产成人精品最新| 精品久久久久久久大神国产| 国产亚洲欧美日韩精品| 久久亚洲春色中文字幕| 性色av一区二区咪爱| 欧美在线国产精品| 日韩免费观看视频| 亚洲成色777777在线观看影院| 日韩在线免费视频观看| 日韩中文字幕在线| 国产日韩精品在线| 亚洲最新av在线网站| 亚洲欧洲av一区二区| 国产精品视频最多的网站| 日韩av片免费在线观看| 国产精品成人一区二区| 亚洲va码欧洲m码| 伊人久久久久久久久久久| 欧美视频国产精品| 国产精品成人在线| 日韩在线中文字| 国产日韩欧美影视| 一夜七次郎国产精品亚洲| 国产精品久久久久久久av电影| 国产视频精品va久久久久久| 亚洲在线视频观看| 亚洲欧美在线第一页| 欧美丝袜一区二区三区| 欧美成aaa人片在线观看蜜臀| 午夜剧场成人观在线视频免费观看| 欧美国产亚洲精品久久久8v| 久久国产精品久久国产精品| 亚洲国产成人精品女人久久久| 欧美极品美女电影一区| 91亚洲午夜在线| 亚洲国产精品va在线观看黑人| 久久亚洲精品国产亚洲老地址| 91香蕉嫩草影院入口| 成人信息集中地欧美| 欧美一级片一区| 国产视频久久久久久久| 国产精品一区久久久| 91精品国产综合久久久久久久久| 亚洲黄色片网站| 51色欧美片视频在线观看| 亚洲国产中文字幕久久网| 最近的2019中文字幕免费一页| 欧美香蕉大胸在线视频观看| 国产精品国产三级国产专播精品人| 国产精品精品视频一区二区三区| 欧美日韩国产成人在线| 日韩av网址在线| 日韩av手机在线观看| 国产精品旅馆在线| 亚洲精品自拍偷拍| 亚洲成人黄色在线观看| 国产精品欧美一区二区三区奶水| 欧美国产亚洲视频| 亚洲黄色有码视频| 日本欧美精品在线| 欧美区二区三区| 欧美理论电影在线观看| 97超碰蝌蚪网人人做人人爽| 九九久久国产精品| 久久精品国产99国产精品澳门| 亚洲香蕉av在线一区二区三区| 亚洲在线观看视频| 97香蕉超级碰碰久久免费软件| 日韩国产精品亚洲а∨天堂免| 色系列之999| 69av在线视频| 久久久中精品2020中文| 九九热最新视频//这里只有精品| 亚洲影院在线看| 亚洲丝袜一区在线| 久久久久久中文| 九色91av视频| 久久男人的天堂| 国语自产精品视频在线看| 欧美在线观看视频| 欧美在线一区二区视频| 欧美激情视频在线| 欧美孕妇性xx| 成人亲热视频网站| 欧美在线视频一二三| 日韩精品在线观| 国产激情综合五月久久| 久久精品亚洲94久久精品| 久久精品中文字幕电影| 亚洲福利视频在线| 91在线看www| 久久人人爽人人爽人人片亚洲| 亚洲精品98久久久久久中文字幕| 亚洲第一精品夜夜躁人人爽| 国产精品www| 亚洲成年网站在线观看| 国产精品久久久亚洲| 欧美日韩精品国产| 奇米4444一区二区三区| 欧美野外wwwxxx| 一区二区日韩精品| 日韩国产高清污视频在线观看| 国产视频亚洲视频| 国产成人一区二区三区小说| 成人亚洲欧美一区二区三区|