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

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

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

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

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

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

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

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

繼承

多態(tài)

trait

如圖:

代碼結構如下:

//

class log {

public function startlog() {

// echo ...

}

public function endlog() {

// echo ...

}

}

//

class publish extends log {

}

//

class answer extends log {

}

可以看到繼承的確滿足了要求,。但這卻違背了面向對象的原則。而發(fā)布(publish)和回答(answer)這樣的操作和日志(log)之間的關系并不是子類與父類的關系,。所以不推薦這樣使用,。

如圖:

實現(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.

}

}

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

如圖:

實現(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();

可以看到,我們在沒有增加代碼復雜的情況下,實現(xiàn)了代碼的復用,。

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

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

class publish {

use log;

public function dopublish() {

$this->publicf();

$this->protectf();

$this->privatef();

}

}

$publish = new publish();

$publish->dopublish();

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

public function

protected function

private function

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

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

通過以下的'代碼來證明trait應用中的屬性的優(yōu)先級:

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();

上述代碼的輸出結果如下:

publish::publicf public function

log::protectf protected function

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

來自當前類的成員覆蓋了 trait 的方法

trait 覆蓋了被繼承的方法

類成員優(yōu)先級為:當前類>trait>父類

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

}

}

通過上面的方式,我們可以在一個類中引用多個trait,。引用多個trait的時候,就容易出問題了,最常見的問題就是兩個trait中如果出現(xiàn)了同名的屬性或者方法該怎么辦呢?這個時候就需要用到insteadof 和 as 這兩個關鍵字了.請看如下實現(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í)行上述代碼,輸出結果如下:

log::startlog public function

check::parametercheck parameter checkparams

check::startlog public function

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

在引用trait時,使用了use關鍵字,use關鍵字也用來引用命名空間。兩者的區(qū)別在于,引用trait時是在class內部使用的,。

s("content_relate");

【php中的trait】相關文章:

php中trait的使用方法

08-25

php中trait的使用方法介紹

07-15

php中的表單處理

09-14

php中json應用

08-20

php中的streams是什么

09-30

php中的隨機性

10-10

session在php中的使用

10-03

php中switch語句的運用

09-16

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

08-27

全文閱讀已結束,,如果需要下載本文請點擊

下載此文檔
a.付費復制
付費獲得該文章復制權限
特價:5.99元 10元
微信掃碼支付
已付款請點這里
b.包月復制
付費后30天內不限量復制
特價:9.99元 10元
微信掃碼支付
已付款請點這里 聯(lián)系客服