又大又粗又硬又爽又黄毛片,国产精品亚洲第一区在线观看,国产男同GAYA片大全,一二三四视频社区5在线高清

當(dāng)前位置:網(wǎng)站首頁(yè) >> 作文 >> 2023年php trait php中的文件包含函數(shù)有幾種實(shí)用

2023年php trait php中的文件包含函數(shù)有幾種實(shí)用

格式:DOC 上傳日期:2023-05-01 10:41:21
2023年php trait php中的文件包含函數(shù)有幾種實(shí)用
時(shí)間:2023-05-01 10:41:21     小編:zdfb

人的記憶力會(huì)隨著歲月的流逝而衰退,寫(xiě)作可以彌補(bǔ)記憶的不足,將曾經(jīng)的人生經(jīng)歷和感悟記錄下來(lái),也便于保存一份美好的回憶。范文怎么寫(xiě)才能發(fā)揮它最大的作用呢?以下是小編為大家收集的優(yōu)秀范文,歡迎大家分享閱讀。

php trait php中的文件包含函數(shù)有幾種篇一

php提供了一種全新的代碼復(fù)用的概念,那就是trait。下面一起來(lái)看看!

現(xiàn)在有和這兩個(gè)類(lèi)。要在其中添加log功能,記錄類(lèi)內(nèi)部的動(dòng)作。有以下幾種方案:

繼承

多態(tài)

trait

如圖:

代碼結(jié)構(gòu)如下:

//

class log {

public function startlog() {

// echo ...

}

public function endlog() {

// echo ...

}

}

//

class publish extends log {

}

//

class answer extends log {

}

可以看到繼承的確滿足了要求。但這卻違背了面向?qū)ο蟮脑瓌t。而發(fā)布(publish)和回答(answer)這樣的操作和日志(log)之間的關(guān)系并不是子類(lèi)與父類(lèi)的關(guān)系。所以不推薦這樣使用。

如圖:

實(shí)現(xiàn)代碼:

//

interface log {

public function startlog();

public function endlog();

}

//

class publish implements log {

public function startlog() {

// todo: implement startlog() method.

}

public function endlog() {

// todo: implement endlog() method.

}

}

//

class answer implements log {

public function startlog() {

// todo: implement startlog() method.

}

public function endlog() {

// todo: implement endlog() method.

}

}

記錄日志的操作應(yīng)該都是一樣的,因此,發(fā)布(publish)和回答(answer)動(dòng)作中的日志記錄實(shí)現(xiàn)也是一樣的。很明顯,這違背了dry(don’t repeat yourself)原則。所以是不推薦這樣實(shí)現(xiàn)的。

如圖:

實(shí)現(xiàn)代碼如下:

//

trait log{

public function startlog() {

// echo ..

}

public function endlog() {

// echo ..

}

}

//

class publish {

use log;

}

$publish = new publish();

$publish->startlog();

$publish->endlog();

//

class answer {

use log;

}

$answer = new answer();

$answer->startlog();

$answer->endlog();

可以看到,我們?cè)跊](méi)有增加代碼復(fù)雜的情況下,實(shí)現(xiàn)了代碼的復(fù)用。

繼承的方式雖然也能解決問(wèn)題,但其思路違背了面向?qū)ο蟮脑瓌t,顯得很粗暴;多態(tài)方式也可行,但不符合軟件開(kāi)發(fā)中的dry原則,增加了維護(hù)成本。而trait方式則避免了上述的不足之處,相對(duì)優(yōu)雅的實(shí)現(xiàn)了代碼的復(fù)用。

了解了trait的好處,我們還需要了解其實(shí)現(xiàn)中的規(guī)則,先來(lái)說(shuō)一下作用域。這個(gè)比較好證明,實(shí)現(xiàn)代碼如下:

class publish {

use log;

public function dopublish() {

$this->publicf();

$this->protectf();

$this->privatef();

}

}

$publish = new publish();

$publish->dopublish();

執(zhí)行上述代碼輸出結(jié)果如下:

public function

protected function

private function

可以發(fā)現(xiàn),trait的作用域在引用該trait類(lèi)的內(nèi)部是都可見(jiàn)的??梢岳斫鉃閡se關(guān)鍵字將trait的實(shí)現(xiàn)代碼copy了一份到引用該trait的類(lèi)中。

說(shuō)到優(yōu)先級(jí),就必須要有一個(gè)對(duì)比的參照物,這里的參照對(duì)象時(shí)引用trait的類(lèi)及其父類(lèi)。

通過(guò)以下的'代碼來(lái)證明trait應(yīng)用中的屬性的優(yōu)先級(jí):

trait log

{

public function publicf() {

echo __method__ . ' public function' . php_eol;

}

protected function protectf() {

echo __method__ . ' protected function' . php_eol;

}

}

class question {

public function publicf() {

echo __method__ . ' public function' . php_eol;

}

protected function protectf() {

echo __method__ . ' protected function' . php_eol;

}

}

class publish extends question {

use log;

public function publicf() {

echo __method__ . ' public function' . php_eol;

}

public function dopublish() {

$this->publicf();

$this->protectf();

}

}

$publish = new publish();

$publish->dopublish();

上述代碼的輸出結(jié)果如下:

publish::publicf public function

log::protectf protected function

通過(guò)上面的例子,可以總結(jié)出trait應(yīng)用中的優(yōu)先級(jí)如下:

來(lái)自當(dāng)前類(lèi)的成員覆蓋了 trait 的方法

trait 覆蓋了被繼承的方法

類(lèi)成員優(yōu)先級(jí)為:當(dāng)前類(lèi)>trait>父類(lèi)

在一個(gè)類(lèi)中,可以引用多個(gè)trait,如下:

trait log

{

public function startlog() {

echo __method__ . ' public function' . php_eol;

}

protected function endlog() {

echo __method__ . ' protected function' . php_eol;

}

}

trait check

{

public function parametercheck($parameters) {

// do sth

}

}

class publish extends question {

use log,check;

public function dopublish($para) {

$this->startlog();

$this->parametercheck($para);

$this->endlog();

}

}

通過(guò)上面的方式,我們可以在一個(gè)類(lèi)中引用多個(gè)trait。引用多個(gè)trait的時(shí)候,就容易出問(wèn)題了,最常見(jiàn)的問(wèn)題就是兩個(gè)trait中如果出現(xiàn)了同名的屬性或者方法該怎么辦呢?這個(gè)時(shí)候就需要用到insteadof 和 as 這兩個(gè)關(guān)鍵字了.請(qǐng)看如下實(shí)現(xiàn)代碼:

trait log

{

public function parametercheck($parameters) {

echo __method__ . ' parameter check' . $parameters . php_eol;

}

public function startlog() {

echo __method__ . ' public function' . php_eol;

}

}

trait check

{

public function parametercheck($parameters) {

echo __method__ . ' parameter check' . $parameters . php_eol;

}

public function startlog() {

echo __method__ . ' public function' . php_eol;

}

}

class publish {

use check, log {

check::parametercheck insteadof log;

log::startlog insteadof check;

check::startlog as csl;

}

public function dopublish() {

$this->startlog();

$this->parametercheck('params');

$this->csl();

}

}

$publish = new publish();

$publish->dopublish();

執(zhí)行上述代碼,輸出結(jié)果如下:

log::startlog public function

check::parametercheck parameter checkparams

check::startlog public function

就如字面意思一般,insteadof關(guān)鍵字用前者取代了后者,as 關(guān)鍵字給被取代的方法起了一個(gè)別名。

在引用trait時(shí),使用了use關(guān)鍵字,use關(guān)鍵字也用來(lái)引用命名空間。兩者的區(qū)別在于,引用trait時(shí)是在class內(nèi)部使用的。

s("content_relate");

【php中的trait】相關(guān)文章:

php中trait的使用方法

08-25

php中trait的使用方法介紹

07-15

php中的表單處理

09-14

php中json應(yīng)用

08-20

php中的streams是什么

09-30

php中的隨機(jī)性

10-10

session在php中的使用

10-03

php中switch語(yǔ)句的運(yùn)用

09-16

php中while 循環(huán)的運(yùn)用

08-27

全文閱讀已結(jié)束,如果需要下載本文請(qǐng)點(diǎn)擊

下載此文檔
你可能感興趣的文章
a.付費(fèi)復(fù)制
付費(fèi)獲得該文章復(fù)制權(quán)限
特價(jià):5.99元 10元
微信掃碼支付
已付款請(qǐng)點(diǎn)這里
b.包月復(fù)制
付費(fèi)后30天內(nèi)不限量復(fù)制
特價(jià):9.99元 10元
微信掃碼支付
已付款請(qǐng)點(diǎn)這里 聯(lián)系客服