php中traits學習筆記

2022-05-15 11:33:09 字數 3201 閱讀 8562

越來越多的框架和**開始使用traits方式去組織一些功能,這是非常高效的**組織結構。

通過trait來減少不必要的類繼承關係,讓**更加復用,形成可以拔插的**集合。

通過逗號分隔,在 use 宣告列出多個 trait,可以都插入到乙個類中。

單個的例子:

<?php 

trait seller

}class myseller

$seller = new myseller();

$seller->sell();

多個trait的例子:

<?php 

trait money

}trait factory

}class user

} $user = new user();

$user->show(); // => i am an user

當引入trait的類也有同名方法或者函式,那麼當前類的該方法會覆蓋trait中的同名方法。

如上面這個例子中user類和money trait都有show方法,則執行之後呼叫的是user類的show方法,列印出"i am an user"的內容。

但是如果兩個 trait 都插入了乙個同名的方法,如果沒有明確解決衝突將會產生乙個致命錯誤。我們需要明確指定是否某個trait的方法或者盡量不要讓不同trait裡面存在同名方法。

1.使用 insteadof 操作符來明確指定使用衝突方法中的哪乙個。例如:

<?php 

trait token

public function tips()

}trait tester

public function tips()

}class controller

}$con = new controller();

$con->tostring('hello');

$con->tips('my god!');

或者使用別名方式去避免同名問題,如:

class controller

}

<?php 

use illuminate\foundation\bus\dispatchesjobs;

use illuminate\routing\controller as basecontroller;

use illuminate\foundation\validation\validatesrequests;

use illuminate\foundation\auth\access\authorizesrequests;

use illuminate\foundation\auth\access\authorizesresources;

class controller extends basecontroller

這裡就使用了四個trait.

越來越多的框架和**開始使用traits方式去組織一些功能,這是非常高效的**組織結構。

通過trait來減少不必要的類繼承關係,讓**更加復用,形成可以拔插的**集合。

通過逗號分隔,在 use 宣告列出多個 trait,可以都插入到乙個類中。

單個的例子:

<?php 

trait seller

}class myseller

$seller = new myseller();

$seller->sell();

多個trait的例子:

<?php 

trait money

}trait factory

}class user

} $user = new user();

$user->show(); // => i am an user

當引入trait的類也有同名方法或者函式,那麼當前類的該方法會覆蓋trait中的同名方法。

如上面這個例子中user類和money trait都有show方法,則執行之後呼叫的是user類的show方法,列印出"i am an user"的內容。

但是如果兩個 trait 都插入了乙個同名的方法,如果沒有明確解決衝突將會產生乙個致命錯誤。我們需要明確指定是否某個trait的方法或者盡量不要讓不同trait裡面存在同名方法。

1.使用 insteadof 操作符來明確指定使用衝突方法中的哪乙個。例如:

<?php 

trait token

public function tips()

}trait tester

public function tips()

}class controller

}$con = new controller();

$con->tostring('hello');

$con->tips('my god!');

或者使用別名方式去避免同名問題,如:

class controller

}

<?php 

use illuminate\foundation\bus\dispatchesjobs;

use illuminate\routing\controller as basecontroller;

use illuminate\foundation\validation\validatesrequests;

use illuminate\foundation\auth\access\authorizesrequests;

use illuminate\foundation\auth\access\authorizesresources;

class controller extends basecontroller

這裡就使用了四個trait.

php中traits學習筆記

越來越多的框架和 開始使用traits方式去組織一些功能,這是非常高效的 組織結構。通過trait來減少不必要的類繼承關係,讓 更加復用,形成可以拔插的 集合。通過逗號分隔,在 use 宣告列出多個 trait,可以都插入到乙個類中。單個的例子 trait seller class myseller...

PHP中的Traits詳解

trait drive n class person class student extends person student new student student study student eat student driving 輸出結果如下 study eatdriving trait 上面...

PHP 5 4中的traits特性

trait 是 php5.4 中的新特性,是 php 多重繼承的一種解決方案。例如,需要同時繼承兩個 abstract class,這將會是件很麻煩的事情,trait 就是為了解決這個問題。簡單使用 首先,當然是宣告個 trait,php5.4增加了 trait 關鍵字 trait first tr...