玩轉PHP的Trait

PHP語言的一個問題是單繼承,這意味着類只能繼承一個其餘的類。然而,不少狀況下須要多繼承,好比繼承多個類的方法,以防止代碼的重複。對於但繼承模式好仍是多繼承模式好,不在本文探討範圍內。php

爲了解決PHP語言單繼承存在的不足,在PHP 5.4 中添加了新特性 trait,Trait 是一種代碼複用機制,爲了減小單繼承語言的限制,使開發人員可以自由地在不一樣層次結構內獨立的類中複用 method。Trait 和 Class 組合的語義定義了一種減小複雜性的方式,避免傳統多繼承問題。segmentfault

Trait是一組方法,能夠包含在類中進行使用,單trait不可實例化。微信

trait Sharable {

public function share($item)
{
return 'share this item';
}

}

你能夠在其餘類中包含這個traitpost

class Post {

use Sharable;

}

class Comment {

use Sharable;

}

若是你實例化上面的類,就能夠調用trait中的方法學習

$post = new Post;
echo $post->share(''); // 'share this item'

$comment = new Comment;
echo $comment->share(''); // 'share this item'

解析上面例子是如何工做的:this

例子中的Post 和 Comment 的實例都成功調用了方法share(),儘管類自己沒有share()方法,就是由於類中使用了trait Shareable.spa

trait的基本原理就是在運行時「複製和粘貼"了方法代碼,即將trait複製到Post和Comment類中,當你實例化對象時,share()方法就可使用了。code

總結:
Trait 沒法如 Class 同樣使用 new 實例化
單個 Trait 可由多個 Trait 組成
在單個 Class 中,可使用多個 Trait
使用trait時候應該堅定避免命名衝突,尤爲是同時使用多個trait時。對象

上篇文章: 我在北京寫代碼 ,你在哪兒?繼承

圖片描述

掃描關注微信公衆號:專一PHP學習

相關文章
相關標籤/搜索