前面我們介紹了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就是為了解決這個問題 在繼承類鏈中隔離了子...