PHP 特性之 trait 二

2021-09-13 10:33:34 字數 1788 閱讀 1771

前面我們介紹了trait的基本使用,下面來介紹下trait比較複雜的用法

使用多個trait
trait member

}trait admin

}class showmember

$member = new showmember();

$member->info();

$member->show();

直接使用,逗號隔開,以上程式將會輸出this is trait,this is admin,

命名衝突

如果使用了多個trait,並且多個trait中的命名有重複,那麼這個時候就會產生乙個致命的錯誤。為了正確的使用這些trait,我們需要用insteadof來呼叫這些同名的方法。

trait member

public function show()

}trait admin

public function show()

}class showmember

}$member = new showmember();

$member->info();

$member->show();

以上程式將會輸出this is member info,this is admin show,。這個時候使用了insteadof來宣告了,我需要使用哪個trait中的方法。避免的衝突引起的錯誤。

trait的抽象成員

trait和普通的類一樣,也是成員變數的,也可以定義抽象方法來強制要求。

trait member

abstract public function show();

}class showmember

}$member = new showmember();

$member->info();

trait的靜態成員

trait 同樣是可以靜態成員變數的

trait member

public static $_a = 1;

public function show()

}class showmember

$member = new showmember();

$member->show();//會輸出1

echo $member::$_a;//也會輸出1

trait的訪問修飾符
上面很多例子可以看到 對trait的方法,跟屬性都是加有public訪問修飾符,是不是就意味著,trait也可以使用訪問修飾符呢,答案是肯定的。但是trait中的屬性跟方法,如果需要被外部的類使用的話,必須為public,即使是protected也是不能被外部的類所使用的。那麼如果我需要在外部的類中對該方法進行私有化怎麼辦呢,下面來看乙個列子

trait member

}class showmember

public function outshow()

}$member = new showmember();

$member->outshow();

//$member::show(); //這個時候直接呼叫 show方法那麼會造成致命錯誤

PHP中的Trait 特性及作用

自 php 5.4.0 起,php 實現了 復用的乙個方法,稱為 traits。traits 是一種為類似 php 的單繼承語言而準備的 復用機制。trait 為了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類中復用方法集。traits 和類組合的語義是定義了一種方式來減少複雜性...

PHP之Trait詳解 轉

php從以前到現在一直都是單繼承的語言,無法同時從兩個基類中繼承屬性和方法,為了解決這個問題,php出了trait這個特性 如下 例項 trait dog class animal class cat extends animal cat new cat cat drive echo cat eat...

物件導向(六)Trait特性

自 php 5.4.0 起,php 實現了一種 復用的方法,稱為 trait。1 類中的一般的特性trait都可以實現。但是要混入類中,而不是代替類 2 trait是為了減少單繼承語言的限制,例如需要同時繼承兩個抽象類,這是php語言不支援的功能,trait就是為了解決這個問題 在繼承類鏈中隔離了子...