搜尋
首頁後端開發php教程php中trait是什麼意思? php中trait的簡單介紹

這篇文章帶給大家的內容是關於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 &#39;i can gps&#39;;
    }
}

使用 trait 定義了一個 GPS 的 trait 用來重複使用,它的關鍵字是 trait 。然後在 car.php 和 mobile.php 中進行引用。

car.php 的定義:

class Car {
    use gps;

    public function move() {
        echo &#39;i can move&#39;;
    }
}

mobile.php 的定義:

<?php

class Mobile {
    use gps;
    public function tel() {
        echo &#39;i can tel&#39;;
    }
}

在car.php 和mobile.php 中,使用use 關鍵字引入了gps 的trait ,這樣在car 和mobile 中就可以呼叫gps() 這個方法了。

test.php 進行測試:

<?php
require_once(&#39;gps.php&#39;);
require_once(&#39;car.php&#39;);
require_once(&#39;mobile.php&#39;);
$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 &#39;i can chinae gps&#39;;
    }
}

在car 中引入,修改car.php 的定義如下:

<?php
class Car {
    use gps, gpschina;    
    public function move() {
        echo &#39;i can move&#39;;
    }
}

再次呼叫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 &#39;i can move&#39;;
    }
}

這樣就使用 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 &#39;car::gps&#39;;
    }
    

    public function move() {
        echo &#39;i can move&#39;;
    }
}

呼叫 test.php 查看結果:

1 car::gps
2 i can gps

可以看出,呼叫了 Car 類別本身的 gps() 方法。

如果在一個類別中,繼承自父類別的方法、use 引入trait 的方法和類別自身的方法同名的話,優先調用自身類別的方法,如果沒有自身類別的方法則呼叫use 引入trait的方法,如果前兩個都沒有,那麼就呼叫繼承自父類別的方法。

相關推薦:

php中trait的意義是什麼呢?

什麼是Trait? php中Trait的申明與使用技巧分享

以上是php中trait是什麼意思? php中trait的簡單介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何使PHP應用程序更快如何使PHP應用程序更快May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

PHP性能優化清單:立即提高速度PHP性能優化清單:立即提高速度May 12, 2025 am 12:07 AM

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

PHP依賴注入:提高代碼可檢驗性PHP依賴注入:提高代碼可檢驗性May 12, 2025 am 12:03 AM

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

PHP性能優化:數據庫查詢優化PHP性能優化:數據庫查詢優化May 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

簡單指南:帶有PHP腳本的電子郵件發送簡單指南:帶有PHP腳本的電子郵件發送May 12, 2025 am 12:02 AM

phpisusedforsenderemailsduetoitsbuilt-inmail()函數andsupportivelibrariesLikePhpMailerAndSwiftMailer.1)usethemail()functionForbasiceMails,butithasimails.2)butithasimail.2)

PHP性能:識別和修復瓶頸PHP性能:識別和修復瓶頸May 11, 2025 am 12:13 AM

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显著提升PHP应用的性能。

PHP的依賴注入:快速摘要PHP的依賴注入:快速摘要May 11, 2025 am 12:09 AM

依賴性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增強量強制性,可驗證性和MATIALWINABIOS.ItallowSpasspassingDepentenciesLikEdenciesLikedAbaseConnectionStoclasseconnectionStoclasseSasasasasareTers,interitationAseTestingEaseTestingEaseTestingEaseTestingEasingAndScalability。

提高PHP性能:緩存策略和技術提高PHP性能:緩存策略和技術May 11, 2025 am 12:08 AM

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具