php trait 學習筆記

2021-07-27 08:32:29 字數 2204 閱讀 3611

php中的類不支援多繼承,但是提供了trait語法類解決單繼承沒法提供的多層**復用問題。

要點:

trait 不能通過它自身來例項化,但可以在類中使用,也可以通過靜態呼叫使用trait中方法和屬性。

<?php 

trait t }

class c }

$cls= new  c();

$cls->t_method();

//通過類呼叫

$cls->c_method();

//靜態呼叫

t::t_method();

?>

輸出結果:

this is t_method

this is c_method

this is t_method

2   在類中使用trait,如果出現類的函式或屬性於trait的函式或屬性同名,就回會發生覆蓋---》當前類中的方法會覆蓋 trait 方法,而 trait 方法又覆蓋了當前類父類中的方法。

<?php 

trait t

public function commonmethod()

}class base

public function commonmethod()

}class c extends base

}$cls=new c();

//trait方法覆蓋父類方法

$cls->samewithbase();

//當前類方法覆蓋trait方法

$cls->commonmethod();

輸出結果

this is trait's samewithbase()

this is class's commonmethod()

3   可以在同乙個類中使用多個trait,如果出現多個trait中有函式或屬性同名的情況,執行時就會報錯。有兩種方式解決,a方式:

需要使用 insteadof 操作符來明確指定使用衝突方法中的哪乙個 ,b方式:使用

as 操作符可以將其中乙個衝突的方法以另乙個名稱來引入。

<?php 

trait t1

public function samename2()

}trait t2

public function samename2()

}class c

}$cls=new c();

$cls->samename1();

$cls->samename2();

$cls->rename();

$cls->rename1();

?>

輸出結果

this is t1's samename1()

this is t1's samename2()

this is t2's samename2()

this is t2's samename1()

4   在使用時可以修改的訪問屬性。

<?php

trait 

helloworld 

}// 修改 sayhello 的訪問控制

class 

myclass1 

}// 給方法乙個改變了訪問控制的別名

// 原版 sayhello 的訪問控制則沒有發生變化

class 

myclass2 

}?>

5    可以用trait來組合trait。

<?php

trait 

hello 

}trait 

world 

}trait 

helloworld 

class 

myhelloworld 

$o = new 

myhelloworld

();$o

->

sayhello

();$o

->

sayworld

();?>

輸出結果

hello world!

6    trait中可以有屬性,靜態方法,抽象方法。

php trait學習筆記

php物件導向不支援多繼承,只支援單繼承。但是單繼承就有侷限性啊,於是就搞出了乙個trait。trait和類很像,但它不能繼承,不能例項化。定義trait與定義類一樣,const static public protected private abstract都可以用。而且,trait與trait之...

php trait 多繼承問題

php從以前到現在一直都是單繼承的語言,無法同時從兩個基類中繼承屬性和方法,為了解決這個問題,php 從5.4出了trait這個特性 優先順序 自身方法 trait的方法 繼承的方法 就是這樣子的。例 trait a trait b class user class vipuser extends ...

學習筆記 雜湊學習筆記

hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...