trait類相關筆記

2021-09-19 01:31:28 字數 3180 閱讀 9250

下面介紹語法規則

做乙個最簡單的demo就是

trait

helper

}class

example3

$exmaple3

=new

example3()

;$exmaple3

->

show()

;

簡單來說就是定義為trait的類,其他的類需要呼叫時,只需要乙個use就可以了,當然,如果有命名空間,還需要加上命名空間。

但是還有一些別的注意點,下面就一一來解析。

trait

helper

}class

example3

}$exmaple3

=new

example3()

;$exmaple3

->

showinfo()

;

trait中的private方法,在example3中也可以使用。

自身方法》trait的方法》繼承的方法

trait

helper

}class

base

}class

example1

extends

base

}class

example2

extends

base

}$exmaple1

=new

example1()

;$exmaple1

->

showinfo()

;print

"\r\n"

;$exmaple2

=new

example2()

;$exmaple2

->

show()

;

使用多個trait類時,用,將他們連線起來就行了。

trait

trait1

trait

trait2

class

examples

還是拿上面的例子,所謂衝突就是在trait1trait2中定義了同乙個方法:

trait

trait1

}trait

trait2

}class

examples

這個時候php不知道用哪乙個,就會fatel_error,而所謂解決衝突就是決定使用哪乙個。

trait

trait1

}trait

trait2

}class

examples

}$examples

=new

examples()

;$examples

->

show()

;

trait

trait1

}trait

trait2

}class

examples

}$examples

=new

examples()

;$examples

->

show()

;

有以下這些注意點:

trait

trait1

}trait

trait2

}class

examples

$examples

=new

examples()

;$examples

->

show()

;

很簡單,就是可以在trait中可以呼叫trait

trait

trait1

// 定義了乙個抽象方法

abstract

function

showinfo()

;}trait

trait2

}class

examples

}$examples

=new

examples()

;$examples

->

show()

;

注意:

trait

helper

public

function

getcount()

}class

example7

class

example8

$example7

=new

example7()

;$example8

=new

example8()

;$example7

->

getcount()

;$example8

->

getcount()

;

輸出:

1

1

注意,這裡我們呼叫的是定義在trait中的static $count,並且讓兩個類使用了其中的getcount方法,以靜態屬性的習慣,我們原本以為會得到:

1

2

但是結果不是,所以即使是靜態屬性,當被2個類呼叫時,這個靜態屬性也不會互相影響,所以大家可以放心使用。

trait 定義了乙個屬性後,類就不能定義同樣名稱的屬性,否則會產生 fatal error。 有種情況例外:屬性是相容的(同樣的訪問可見度、初始預設值)。 在 php 7.0 之前,屬性是相容的,則會有 e_strict 的提醒。

trait類 型別萃取

這裡實現乙個通用的計算陣列類的資料求和函式。c 中用模板實現多型屬於靜態多型,trait類就是做為模板引數以實現靜態多型。根據不同的模板引數型別,以實現不同模板資料型別所需的功能。其實說白了,就是利用模板的一些基本規則,將其合理的組合起來,以達到根據型別不同時函式的操作有細微個性的差別。依據tdd開...

常用trait和特殊類

scala中沒有列舉型別,如果要實線列舉型別可以讓乙個物件extends enumeration。例如 object weekday extends enumeration import weekday.def isworkingday d weekday d sat d sun weekday.v...

PHP的類和物件 七 Trait

自 php 5.4.0 起,php 實現了一種 復用的方法,稱為 trait。因為php是單繼承,當你需要多個區別的特性,就不得不去組合多個基類,trait出現後就避免了這些問題,trait的優勢就是可以隨意組合,而且 清晰。trait不僅僅是可復用 段的集合,應該是一組描述了某個特性的 屬性與方法...