PHP 8.4 終於來了,帶來了令人興奮的變化,這些變化將改變開發人員的工作方式!隨著每個新版本的出現,PHP 不斷證明為什麼它是當今 Web 開發領域如此重要的工具。
先決條件
本文假設您具備 PHP 程式語言的基本知識。
我用於 PHP 開發的軟體
Laravel Herd:用於管理我的 PHP 版本和 Nginx 伺服器。
PHPStorm:一款出色的 IDE,具有良好的 IntelliSense 和 AI 副駕駛功能。
Laragon:一個易於使用的本地開發環境,支援 PHP 等技術。
不對稱屬性可見性(版本 2)?
在 PHP 中,物件屬性的可見性傳統上是對稱的。這意味著屬性的 get 和 set 操作必須共享相同的可見性(公共、私有或受保護),但不能不同。
例如,如果一個屬性是公共的,則對其的讀取和寫入都是公共的,無法允許其中一個操作而沒有另一個操作。
在上下文中,當您將類別的屬性聲明為公共時,它就會變得可變,從而允許從類別外部讀取和修改它。
但是,隨著不對稱可見性的出現,您現在可以定義單獨的範圍來讀取和寫入屬性。
這意味著屬性可以在一種上下文中可讀,在另一個上下文中可寫,從而更好地控制屬性的存取和修改方式。
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
我們可以將一個屬性設為公開,並將設定的屬性設為私有。這意味著該屬性無法在類別外部更新,使其不可變。
如果您嘗試修改 $name 屬性,您將收到一條錯誤,顯示由於可見性範圍而無法修改該屬性。
以下是關於不對稱可見性需要注意的幾個要點:
set-visibility 聲明中不允許有空格。私人(設定)是正確的。 private( set ) 不正確,會導致解析錯誤。
如果屬性被宣告為公共,則可以省略主要可見性。例如,public private(set) 和 private(set) 的行為相同,因為隱含了公共可見性。
只有類型化屬性才允許對集合運算具有單獨的可見性。這意味著您無法將非對稱可見性套用至 PHP 中的非類型化屬性。
設定的可見性必須與取得的可見性相同或更嚴格。例如,public protected(set) 和 protected protected(set) 是有效的,但 protected public(set) 會導致語法錯誤。
了解有關不對稱可見性的更多信息,包括供您細讀的其他示例。
財產掛鉤?
Property hook 是 PHP 8.4 的一個很棒的功能,它為開發人員引入了一種直接向變數添加 get 和 set 指令的方法,而無需明確創建讀取和寫入變數的方法。
或者,可以使用 __get 和 __set 魔術方法,但這會使程式碼更加冗長,可能會引入錯誤,並破壞靜態分析工具。
可以肯定地說,屬性鉤子的設計和語法與 Kotlin 類似,但主要受 C# 和 Swift 程式語言的影響。
在 PHP 8.3 中,我們可以建立一個在其建構函式中包含屬性的類,並且它使我們能夠讀取和寫入該屬性。
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
這種方法的問題在於,當我們決定寫入屬性時,我們要么使用 __set 魔術方法,要么明確地創建一個方法來改變變量,這可能會導致程式碼庫中斷。
屬性掛鉤允許開發人員在建立屬性後立即建立 set 指令。
class Car { public function __construct(public string $model) { } }
請注意,傳遞給 set 指令的值必須與屬性的類型相同,否則會拋出錯誤。
您可以將另一種類型傳遞給 set 指令,並在寫入屬性之前將其轉換為正確的類型,如下所示:
class Car{ public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } }
上面的範例展示了我們如何安全地從 set 指令接收複合類型變數並將其解析為屬性定義的正確類型。
如果傳遞給 set 指令的參數與屬性類型相同,則可以省略。例如,下面的兩個方法都是有效的並且行為類似。
class Car{ public string $year{ set (string|number $value) { $year = intval($value); if($year year= $value; } } }
請注意,如果省略參數,則預設為 $value。這種語法在 Kotlin 和 C# 等程式語言中很常見。
實例化類別而無需額外的括號
在此功能之前,在 PHP 中存取類別的成員需要在類別周圍添加額外的括號。
// --------------------------METHOD 1---------------------------- public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } // --------------------------METHOD 2---------------------------- public string $model{ set { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } }
如果不將 new Car() 呼叫括在括號中,則會出現解析錯誤。
新語法允許我們存取方法、屬性和常數,而無需額外的括號。
class Car { public function getName(){ return "Toyota Camry"; } } $carName = (new Car())->getName();
有關此提議更改的完整詳細信息,請查看 RFC 中的詳細信息。
引入新的數組函數
PHP 8.4 即將推出新的輔助函數。
其中一些函數已經在 Laravel Arr 或 Collection 助理中實作。
array_find_key() 函數
array_find_key($array, $callback) 函數傳回 $callback 方法傳回 true 的第一個元素的鍵。如果沒有元素滿足條件,函數會傳回 null。
class Animal{ public private(set) string $name; public setName(string $foo){ $ths->name = $foo; } } $animal = new Animal(); echo $animal->name; // This will run correctly
array_find() 函數
array_find_key() 函數旨在搜尋陣列並傳回滿足回呼函數定義的條件的第一個元素的鍵。
與 array_find_key() 類似,如果沒有找到符合的元素,則傳回 null。
class Car { public function __construct(public string $model) { } }
如果陣列中沒有水果的數量大於 10,則函數將傳回 null。
array_any() 函數
array_any() 函數決定數組中的至少一個元素是否符合所提供的評估函數指定的特定標準。
如果至少有一個元素滿足條件,函數傳回true;否則,傳回 false。
class Car{ public string $model{ set (string $value) { if(strlen($value) === 0){ throw new ValueError("Model name cannot be empty"); } $this->model = $value; } } }
如果數組中沒有數字大於 10,函數將傳回 false。
array_all() 函數
array_all() 函數檢查陣列中的每個項目是否通過特定測試。它對每個項目應用特殊規則(回調函數)。
如果所有項目都根據規則通過測試,則 array_all() 傳回 true。
class Car{ public string $year{ set (string|number $value) { $year = intval($value); if($year year= $value; } } }
在此範例中,array_all() 函數將迭代 $numbers 陣列並將回呼函數套用至每個元素。回呼檢查數字是否能被 2 整除(即偶數)。
由於數組中的所有數字都是偶數,因此 array_all() 函數將傳回 true,並顯示訊息「所有數字都是偶數」。將顯示。
我們已經研究了 PHP 8.4 中引入的關鍵改進。這些更新為開發人員提供了寶貴的增強功能,包括強大的新功能和潛在的效率提升。
要深入了解所有更新,包括範例和詳細說明,請造訪官方 PHP 8.4.0 發佈公告頁面。
不要忘記查看棄用和向後相容性更改,以確保順利過渡到最新版本。
接下來是什麼? ?
如果您喜歡這篇文章,請不要忘記與他人分享。
我很想聽聽您的想法 - 請在下面發表評論,讓我們繼續對話。乾杯! ?
追蹤我,取得更多 PHP、Node.js、TypeScript 和 PHP 文章!您也可以在 Twitter 或 LinkedIn 上找到我。
以上是PHP:主要功能和改進的詳細內容。更多資訊請關注PHP中文網其他相關文章!

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

你應該關心DependencyInjection(DI),因為它能讓你的代碼更清晰、更易維護。 1)DI通過解耦類,使其更模塊化,2)提高了測試的便捷性和代碼的靈活性,3)使用DI容器可以管理複雜的依賴關係,但要注意性能影響和循環依賴問題,4)最佳實踐是依賴於抽象接口,實現鬆散耦合。

是的,優化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)優化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,並避免使用

theKeyStrategiestosigantificallyBoostPhpaPplicationPerformenCeare:1)UseOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)優化AtabaseInteractionswithPreparedStateTementStatementStatementAndProperIndexing,3)配置

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

WebStorm Mac版
好用的JavaScript開發工具

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

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
視覺化網頁開發工具