成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

玩轉(zhuǎn)PHP的Trait

hikui / 800人閱讀

摘要:語(yǔ)言的一個(gè)問(wèn)題是單繼承,這意味著類只能繼承一個(gè)其他的類。然而,很多情況下需要多繼承,比如繼承多個(gè)類的方法,以防止代碼的重復(fù)。和組合的語(yǔ)義定義了一種減少?gòu)?fù)雜性的方式,避免傳統(tǒng)多繼承問(wèn)題。是一組方法,可以包含在類中進(jìn)行使用,單不可實(shí)例化。

PHP語(yǔ)言的一個(gè)問(wèn)題是單繼承,這意味著類只能繼承一個(gè)其他的類。然而,很多情況下需要多繼承,比如繼承多個(gè)類的方法,以防止代碼的重復(fù)。對(duì)于但繼承模式好還是多繼承模式好,不在本文探討范圍內(nèi)。

為了解決PHP語(yǔ)言單繼承存在的不足,在PHP 5.4 中添加了新特性 trait,Trait 是一種代碼復(fù)用機(jī)制,為了減少單繼承語(yǔ)言的限制,使開發(fā)人員能夠自由地在不同層次結(jié)構(gòu)內(nèi)獨(dú)立的類中復(fù)用 method。Trait 和 Class 組合的語(yǔ)義定義了一種減少?gòu)?fù)雜性的方式,避免傳統(tǒng)多繼承問(wèn)題。

Trait是一組方法,可以包含在類中進(jìn)行使用,單trait不可實(shí)例化。

trait Sharable {

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

}

你可以在其他類中包含這個(gè)trait

class Post {

use Sharable;

}

class Comment {

use Sharable;

}

如果你實(shí)例化上面的類,就可以調(diào)用trait中的方法

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

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

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

例子中的Post 和 Comment 的實(shí)例都成功調(diào)用了方法share(),盡管類本身沒(méi)有share()方法,就是因?yàn)轭愔惺褂昧藅rait Shareable.

trait的基本原理就是在運(yùn)行時(shí)“復(fù)制和粘貼"了方法代碼,即將trait復(fù)制到Post和Comment類中,當(dāng)你實(shí)例化對(duì)象時(shí),share()方法就可以使用了。

總結(jié):
Trait 無(wú)法如 Class 一樣使用 new 實(shí)例化
單個(gè) Trait 可由多個(gè) Trait 組成
在單個(gè) Class 中,可以使用多個(gè) Trait
使用trait時(shí)候應(yīng)該堅(jiān)決避免命名沖突,尤其是同時(shí)使用多個(gè)trait時(shí)。

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

掃描關(guān)注微信公眾號(hào):專注PHP學(xué)習(xí)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22350.html

相關(guān)文章

  • PHP 特性之 trait (一)

    摘要:在閱讀文檔的時(shí)候看到一個(gè)類是以聲明的。是一種代碼復(fù)用技術(shù),為的單繼承限制提供了一套靈活的代碼復(fù)用機(jī)制。下面把的代碼做一個(gè)修改以上代碼會(huì)輸出??梢钥闯鰞?yōu)先級(jí)的順序?yàn)?,?dāng)前類的優(yōu)先級(jí)基類。 ??在閱讀laravel文檔的時(shí)候看到一個(gè)類 是以 Trait聲明的。平時(shí)在工作中從來(lái)沒(méi)有用過(guò),于是就去看了下官方文檔。原來(lái)這個(gè)類早在php5.4.0就有了??上г陧?xiàng)目中從來(lái)沒(méi)有用過(guò)。 ??Trait看...

    ermaoL 評(píng)論0 收藏0
  • 關(guān)于PHPTrait特性

    摘要:關(guān)于作者程序開發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事和前端開發(fā),使用和,端使用混合式開發(fā)。和組合的語(yǔ)義定義了一種減少?gòu)?fù)雜性的方式,避免傳統(tǒng)多繼承和類相關(guān)典型問(wèn)題。它為傳統(tǒng)繼承增加了水平特性的組合也就是說(shuō),應(yīng)用的幾個(gè)之間不需要繼承。 關(guān)于作者 程序開發(fā)人員,不拘泥于語(yǔ)言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和...

    wind3110991 評(píng)論0 收藏0
  • php 代碼復(fù)用機(jī)制--traits

    摘要:是一種為類似的單繼承語(yǔ)言而準(zhǔn)備的代碼復(fù)用機(jī)制。因?yàn)橹械淖兞凯h(huán)境是基于函數(shù)的,所以會(huì)輸出博客鏈接代碼復(fù)用機(jī)制,本文后續(xù)如有更新將會(huì)在博客更新。 提到 php 的代碼復(fù)用,我們可能第一時(shí)間會(huì)想到繼承,但是這種單繼承語(yǔ)言一旦派生的子類過(guò)多,那么會(huì)產(chǎn)生一系列的問(wèn)題,比如依賴父類、耦合性太大、破壞了類的封裝性。那么有沒(méi)有更好的方法來(lái)實(shí)現(xiàn)代碼復(fù)用呢? 自 PHP 5.4.0 起,PHP 實(shí)現(xiàn)了另外...

    yedf 評(píng)論0 收藏0
  • 簡(jiǎn)述我所理解 PHP Trait

    摘要:和組合的語(yǔ)義定義了一種減少?gòu)?fù)雜性的方式,避免傳統(tǒng)多繼承和類相關(guān)典型問(wèn)題。隊(duì)列的目的是將耗時(shí)的任務(wù)延時(shí)處理,比如發(fā)送郵件,從而大幅度縮短請(qǐng)求和相應(yīng)的時(shí)間。同樣的道理,根據(jù)引入不同的來(lái)完成對(duì)應(yīng)的功能。 showImg(https://segmentfault.com/img/remote/1460000010868178); Trait 概念 在常規(guī)的 PHP 開發(fā)中,我們都習(xí)慣于先編寫一...

    gecko23 評(píng)論0 收藏0
  • php易錯(cuò)筆記-類與對(duì)象,命名空間

    摘要:類與對(duì)象基本概念如果在之后跟著的是一個(gè)包含有類名的字符串,則該類的一個(gè)實(shí)例被創(chuàng)建。如果該類屬于一個(gè)名字空間,則必須使用其完整名稱。如果一個(gè)類被聲明為,則不能被繼承。命名空間通過(guò)關(guān)鍵字來(lái)聲明。 類與對(duì)象 基本概念 new:如果在 new 之后跟著的是一個(gè)包含有類名的字符串,則該類的一個(gè)實(shí)例被創(chuàng)建。如果該類屬于一個(gè)名字空間,則必須使用其完整名稱。 Example #3 創(chuàng)建一個(gè)實(shí)例 ...

    MartinHan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<