目錄
2。零合併操作員( ?? ) - 安全默認值
3。 Nullsafe操作員( ?-> ) - 鏈接而不擔心無效
將所有這些放在一起
首頁 後端開發 php教程 揭開PHP的三元,無效合併和無效操作員

揭開PHP的三元,無效合併和無效操作員

Jul 25, 2025 pm 04:48 PM
PHP Syntax

三元運算符(?:)用於簡單的If-Else邏輯,根據條件返回兩個值之一; 2。零合併運算符(??)如果不是零或未定義的左操作數,則返回左操作數,否則正確的操作數,使其非常適合設置默認值,而不會受到諸如0或''之類的虛假值的影響; 3。 pHP 8中引入的nullsafe操作員(? - >)允許在可能為null的對像上安全鏈接方法呼叫或屬性訪問,如果任何步驟為null,則返回null而不是造成致命錯誤;這些操作員一起簡化有條件的邏輯和無效處理,減少樣板代碼,並在適當使用時提高可讀性。

揭開Php \ f \ \ flosing和Nullsafe操作員的神秘面紗

PHP的三元,無效的合併和Nullsafe操作員是有力的工具,可幫助編寫更清潔,更簡潔的代碼,尤其是在處理有條件的邏輯和無效檢查時。讓我們用簡單的術語分解它們,展示它們的工作方式以及何時使用每個人。


1。三元操作員( ? : :) - 簡單的條件速記

三元運算符是一種緊湊的方式,可以在一行中編寫if-else語句。

句法:

 $結果=條件? value_if_true:value_if_false;

例子:

 $ age = 20;
$ status =($ age> = 18)? “成人”:“次要”;
Echo $狀態; //輸出:成人

這對於簡單決策很有用,例如設置默認消息或格式化輸出。

專家提示:避免嵌套三元 - 它很快變得不可讀。

 //很難遵循
$結果= $ a? ($ b?'兩個':'只有a'):'都不是';

//更好:使用IF-ELSE進行複雜邏輯

根據條件選擇兩個值之間時,請使用三元。保持簡單。


2。零合併操作員( ?? ) - 安全默認值

該操作員就是安全處理null 。如果存在並且不是null ,則它將返回左操作數,否則返回右側。

句法:

 $ result = $ variable ?? '默認';

例子:

 $ username = $ _get ['用戶'] ?? '客人';
echo $ username; //如果未設置$ _get ['user'],請使用'guest'

超級全局,數組鍵或配置陣列特別方便。

比較它與三元:

 //帶有三元 - 檢查 *真實 *,而不僅僅是無效
$ name =!空($ _ get ['name'])? $ _get ['name']:'匿名';

//隨著無效的合併 - 僅關心零/未定義
$ name = $ _get ['name'] ?? '匿名的';

因此,如果$_GET['name'] = '' (空字符串),則三元式使用'Anonymous' ,但是??會使用空字符串,因為它不是null

?底線:使用??當您僅關心null或未定義值時,而不是諸如0''false虛假值時。


3。 Nullsafe操作員( ?-> ) - 鏈接而不擔心無效

Nullsafe操作符在PHP 8中引入,可讓您安全地調用可能為null對像上的方法或訪問屬性。

沒有nullsafe(風險):

 $ country = $ user-> getAddress() - > getCountry() - > getName();
//致命錯誤,如果任何步驟返回null

與nullsafe:

 $ country = $用戶? - > getAddress()? - > getCountry()? - > getName();
//如果任何步驟為null,則返回null,沒有錯誤

每個?->說:“如果左側的東西沒有空,否則請停止並返回null。”

現實世界用例:

 $ displayName = $ apiresponse? - > getuser()? - > getProfile()? - > getDisPlayName()?? “未知用戶”;

這可以安全地穿越一系列方法呼叫,如果丟失了任何東西,則會歸還'Unknown User'

它不是替代適當驗證的替代品,而是減少了樣板空檢查。


將所有這些放在一起

這些操作員可以一起工作:

 class userProfile {
    public函數__construct(private?string $ displayName){}

    public函數getDisPlayName():? string {
        返回$ this-> displayName;
    }
}

類用戶{
    公共功能__construct(private?userProfile $ profile){}

    public函數getProfile():? userProfile {
        返回$ this->個人資料;
    }
}

$ user = new用戶(new UserProfile(''));

$ name = $用戶? - > getProfile()? - > getDisPlayName()?? '匿名的';
echo $ name; //輸出:(空字符串) - 因為它不是零!

等待 - 為什麼不是'Anonymous' ?因為getDisplayName()返回一個空字符串( '' ),而不是null ,所以??不觸發。

如果要將空字符串視為無效,請與其他邏輯相結合:

 $ name = $ user? - > getProfile()? - > getDisPlayName();
$ name =!空($ name)? $名稱:“匿名”; //現在檢查空虛

或使用此模式重複使用輔助功能。


這些操作員不是魔術,但它們使日常代碼更安全,更短。明智地使用它們:

  • ternary( ? : :) →對於簡單的true/false選擇
  • 零合併( ?? →當您想要null定義的後備後備
  • nullsafe( ?-> →當鏈接對象呼叫可能為null

它們不能取代良好的設計,但會降低噪音並防止常見的錯誤。

基本上,它們可以幫助您停止編寫“如果存在,然後將其遍布到各地”。

以上是揭開PHP的三元,無效合併和無效操作員的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

Rimworld Odyssey如何釣魚
1 個月前 By Jack chen
Kimi K2:最強大的開源代理模型
1 個月前 By Jack chen
我可以有兩個支付帳戶嗎?
1 個月前 By 下次还敢

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1602
29
PHP教程
1506
276
PHP 8屬性的簡介:用結構化元數據代替DocBlocks PHP 8屬性的簡介:用結構化元數據代替DocBlocks Jul 25, 2025 pm 12:27 PM

php8attributesreplaceplacecblocksformetAdataByProvidingType-safe,nenativeSuppportedAnnotations.1.AttriButesRedEarsedefinedused#[attribute] [attribute]和cantargetClasses,方法,方法,屬性等

掌握PHP陣列破壞性和傳播操作員 掌握PHP陣列破壞性和傳播操作員 Jul 25, 2025 am 04:44 AM

PHP的數組解構和展開運算符可通過簡潔語法提升代碼可讀性與靈活性。 1.數組解構支持從索引和關聯數組中提取值,如[$first,$second]=$colors可分別賦值;可通過空佔位符跳過元素,如[,,$third]=$colors;關聯數組解構需用=>匹配鍵,如['name'=>$name]=$user,支持重命名變量和設置默認值以應對缺失鍵。 2.展開運算符(...)可將數組展開合併,如[...$colors,'blue'],支持多數組合併及關聯數組覆蓋,但後續鍵會覆蓋前者,且不重

PHP語法容易嗎? PHP語法容易嗎? Jul 17, 2025 am 04:12 AM

是的,phpsyntaxiseasy,尤其是forbeginners,因為炎是可見的,可以整合willwithhtml,andrequiresminimalsetup.itssyntaxisstraightforward,允許使用$ forvariobles,semicolonsolonsolonsolonsolonsolonsolonsolonforstatements,允許directembedectembedembedectembedembedembedembednothtmlwithtags

靜態與自我:PHP中的晚期靜態綁定 靜態與自我:PHP中的晚期靜態綁定 Jul 26, 2025 am 09:50 AM

當在繼承中使用self調用靜態方法時,它始終指向定義方法的類,而非實際調用的類,導致無法按預期調用子類重寫的方法;而static採用後期靜態綁定,能在運行時正確解析到實際調用的類。 1.self是早期綁定,指向代碼所在類;2.static是後期綁定,指向運行時調用類;3.使用static可實現靜態工廠方法,自動返回子類實例;4.static支持方法鏈中繼承屬性的正確解析;5.LSB僅適用於靜態方法和屬性,不適用於常量;6.在可繼承的類中應優先使用static以提升靈活性和可擴展性,該做法在現代PH

揭開PHP的三元,無效合併和無效操作員 揭開PHP的三元,無效合併和無效操作員 Jul 25, 2025 pm 04:48 PM

Theternaryoperator(?:)isusedforsimpleif-elselogic,returningoneoftwovaluesbasedonacondition;2.Thenullcoalescingoperator(??)returnstheleftoperandifitisnotnullorundefined,otherwisetherightoperand,makingitidealforsettingdefaultswithoutbeingaffectedbyfals

了解php中的變異功能和參數解開。 了解php中的變異功能和參數解開。 Jul 25, 2025 am 04:50 AM

PHP的可變函數和參數解包通過splat操作符(...)實現,1.可變函數使用...$params收集多個參數為數組,必須位於參數列表末尾,可與必需參數共存;2.參數解包使用...$array將數組展開為獨立參數傳入函數,適用於數值索引數組;3.兩者可結合使用,如在包裝函數中傳遞參數;4.PHP8 支持解包關聯數組時匹配具名參數,需確保鍵名與參數名一致;5.注意避免對非可遍歷數據使用解包,防止致命錯誤,並註意參數數量限制。這些特性提升了代碼靈活性和可讀性,減少了對func_get_args()等

利用現代PHP中的命名論證和構造屬性促進 利用現代PHP中的命名論證和構造屬性促進 Jul 24, 2025 pm 10:28 PM

php8.0'snameDargumentsAndConstructorPropertyPromotionimprovecodeclarityAndReduceBoilerplate:1.1.NamedArgumentsLetyOupSparameTersByname,增強可讀性和可讀取性andallowingFlexibleOrder; 2.ConstructorpropertyProperpropyPropyPromotyPromotionautomotationalomationalomatialicallicallialicalCeratesandassandassAssAssAssAssAsspropertiessiessiespropertiessiessiessiessiessiessiessiessiessiessiessies

php匿名函數與箭頭函數:語法深度潛水 php匿名函數與箭頭函數:語法深度潛水 Jul 25, 2025 pm 04:55 PM

箭頭函數適用於單一表達式、簡單回調和提升可讀性的場景;2.匿名函數適用於多行邏輯、複雜控制流、引用外部變量和使用yield生成器的場景;因此應根據具體需求選擇:簡單場景優先使用箭頭函數以提高代碼簡潔性,複雜場景則使用匿名函數以獲得完整功能支持。

See all articles