PHP Traits 視頻教程:簡單易學的Trait 技術講解
Trait 是一種在 PHP 中定義可復用代碼的方法。Trait 類似于類,但不是類。它是可被多個類復用的代碼塊集合,用于組合某些功能。Trait 可以為類的功能提供更直接的支持,而無需使用繼承。
Trait 是 PHP5.4版本引入的一項新技術,自此很多框架和大型系統都越來越頻繁的使用Trait技術。
接下來就讓我們通過這本課程視頻,詳細了解 PHP Traits 的基本概念、基本語法以及如何用Trait創建一個快捷簡潔的 PHP 應用。
Ptag:
Trait 可以由多個類共用,進而讓我們減少了代碼的冗余,提高了應用的可維護性和性能。這也是為什么在大型 PHP應用中經常使用 Trait 的主要原因之一。
要使用 Trait,必須在聲明類之前聲明。若要使用它,則需要使用 use 語句。在下面的代碼塊中,我們使用 Trait Console,用于在命令行輸出日志。
trait Console{ function log($msg){ echo date('Y-m-d H:i:s')." :".$msg."\n"; } } class MyLogger{ use Console; function info($msg){ $this->log('[Info]: '.$msg); } function error($msg){ $this->log('[Error]: '.$msg); } } $logger = new MyLogger(); $logger->info('This is an info message!'); $logger->error('This is an error message!');在這段代碼中,我們定義了 trait Console 中,唯一一個方法log,用于輸出日志信息。然后,我們在 MyLogger 類中使用了 Console,MyLogger 可以直接使用 log 方法。MyLogger 類可以使用 $this 不需實例化而直接調用 log 方法。
此外,Trait 也可以使用方式來解決菱形繼承的問題,一個類可以繼承多個 Trait,避免了多重繼承帶來的歧義和不確定性。 下面來演示一下 Trait 解決菱形繼承的問題:
trait Trait1{ function foo(){ echo 'Trait1::foo called!'."\n"; } function Bar(){ echo 'Trait1::Bar called!'."\n"; } } trait Trait2{ function foo(){ echo 'Trait2::foo called!'."\n"; } } class MyClass{ use Trait1,Trait2 { Trait1::foo insteadof Trait2; Trait2::foo as foo2; } } $obj = new MyClass(); $obj->foo();// Trait1::foo called! $obj->foo2();//Trait2::foo called!在上面這個例子中, Trait1 和 Trait2 都定義了 foo 方法,因此,PHP 在執行 MyClass->foo() 時會拋出一個錯誤。我們需要使用 insteadof ,來指定使用哪個 Trait 中的方法。 Ptag: Trait 可以使用類似繼承類的方法實現代碼的重構,避免代碼重復導致的代碼質量不好問題。只要在不同的類中使用 Trait 實現,靈活性、維護性等都大幅度提升了。Trait 這一技術是 PHP 中的一項重要特性,是大型項目開發中不可或缺的工具。 通過這本課程視頻,我們對 PHP Traits 的基本概念、基本語法有了較深刻的了解,大家也可以嘗試運用 trait 技術改進自己的 PHP 應用。
下一篇css背景的透明度