欧美成人永久免费_欧美日本五月天_A级毛片免看在线_国产69无码,亚洲无线观看,精品人妻少妇无码视频,777无码专区,色大片免费网站大全,麻豆国产成人AV网,91视频网络,亚洲色无码自慰

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

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

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

現(xiàn)在有和這兩個(gè)類。要在其中添加log功能,記錄類內(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)系并不是子類與父類的關(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è)跊]有增加代碼復(fù)雜的情況下,實(shí)現(xiàn)了代碼的復(fù)用。

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

了解了trait的好處,我們還需要了解其實(shí)現(xiàn)中的規(guī)則,先來說一下作用域。這個(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類的內(nèi)部是都可見的,??梢岳斫鉃閡se關(guān)鍵字將trait的實(shí)現(xiàn)代碼copy了一份到引用該trait的類中。

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

通過以下的'代碼來證明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

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

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

trait 覆蓋了被繼承的方法

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

在一個(gè)類中,可以引用多個(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();

}

}

通過上面的方式,我們可以在一個(gè)類中引用多個(gè)trait,。引用多個(gè)trait的時(shí)候,就容易出問題了,最常見的問題就是兩個(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)鍵字也用來引用命名空間,。兩者的區(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)系客服