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

熱AI工具

Undress AI Tool
免費脫衣圖片

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

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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