php中trait是什麼意思? php中trait的簡單介紹
這篇文章帶給大家的內容是關於php中trait是什麼? php中trait的簡單介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
什麼是 trait?
看看 PHP 官網的介紹。
自 PHP 5.4.0 起,PHP 實作了程式碼重複使用的方法,稱為 trait。
Trait 是為類似 PHP 的單繼承語言而準備的程式碼重複使用機制。 Trait 為了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類別中重複使用 method。 Trait 和 Class 組合的語意定義了一種減少複雜性的方式,避免傳統多繼承和 Mixin 類別相關典型問題。
Trait 和 Class 相似,但只是旨在以細粒度和一致的方式來組合功能。無法透過 trait 自身來實例化。它為傳統繼承增加了水平特性的組合;也就是說,應用的幾個 Class 之間不需要繼承。
範例1
手機和汽車都有 GPS 功能,GPS 是用來定位的功能的,因此功能應該是統一的。手機 和 汽車 除了 GPS 功能外,基本上沒有什麼相同之處,因此不能使用繼承。而介面的話,我認為不同的類別去實作介面時,介面的實作可能是不同的,但是 GPS 的功能就是用來定位的。因此使用 trait ,而不使用 class 和 interface,這是我的理解,不知道是否正確。
gps.php 的定義:
<?php trait Gps { public function gps() { echo 'i can gps'; } }
使用 trait 定義了一個 GPS 的 trait 用來重複使用,它的關鍵字是 trait 。然後在 car.php 和 mobile.php 中進行引用。
car.php 的定義:
class Car { use gps; public function move() { echo 'i can move'; } }
mobile.php 的定義:
<?php class Mobile { use gps; public function tel() { echo 'i can tel'; } }
在car.php 和mobile.php 中,使用use 關鍵字引入了gps 的trait ,這樣在car 和mobile 中就可以呼叫gps() 這個方法了。
test.php 進行測試:
<?php require_once('gps.php'); require_once('car.php'); require_once('mobile.php'); $car = new Car(); $mobile = new Mobile(); $car->gps(); echo "\n"; $mobile->gps();
輸出結果如下:
1 i can gps 2 i can gps
範例2
在car 中引入了另外一個國產的gps 。
gpschina.php 定義如下:
<?php trait GpsChina { public function gps() { echo 'i can chinae gps'; } }
在car 中引入,修改car.php 的定義如下:
<?php class Car { use gps, gpschina; public function move() { echo 'i can move'; } }
再次呼叫test.php 進行測試,這時會報錯,報錯如下:
1 Fatal error: Trait method gps has not been applied, because there are collisions with other trait methods on Car in Car.php on line 4
因為在引入的trait 中gps 和gpschina 各有一個gps ,而直接使用$car->gps() 時無法確定到底使用的是gps 的gps() 方法,還是使用的gpschina 的gps() 方法,因此報錯了。這樣的話,我們需要確定一個。修改 car.php 檔案。
<?php class Car { use gps, gpschina { GpsChina::gps insteadof Gps; } public function move() { echo 'i can move'; } }
這樣就使用 GpsChina::gps 的方法 替換掉了 Gps 的方法了,在呼叫 test.php 進行檢視。
1 i can chinae gps 2 i can gps
這樣,對於 $car->gps() 後就呼叫了 gpschina 中的 gps() 方法了。
範例3
如果在 Car 類別中本身有一個 gps() 方法呢?修改 Car 類別。
<?php class Car { use gps, gpschina { GpsChina::gps insteadof Gps; } public function gps() { echo 'car::gps'; } public function move() { echo 'i can move'; } }
呼叫 test.php 查看結果:
1 car::gps 2 i can gps
可以看出,呼叫了 Car 類別本身的 gps() 方法。
如果在一個類別中,繼承自父類別的方法、use 引入trait 的方法和類別自身的方法同名的話,優先調用自身類別的方法,如果沒有自身類別的方法則呼叫use 引入trait的方法,如果前兩個都沒有,那麼就呼叫繼承自父類別的方法。
相關推薦:
以上是php中trait是什麼意思? php中trait的簡單介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
