php判斷一個數組為空白if(!array())好,還是if(empty(array()))?

來源:互聯網
上載者:User
關鍵字 php

php判斷一個數組為空白if(!array())好,還是if(empty(array()))?

回複內容:

php判斷一個數組為空白if(!array())好,還是if(empty(array()))?

首先習慣性地,RTFM

沒有好不好,只有合適不合適

!empty()行為有什麼區別?

  • !相當於轉換為布爾值後取反,結果可以參照手冊的布爾值轉換部分

  • empty行為同樣見手冊

他們的行為有3個差異

  1. 空SimpleXML (經過實驗,發現這是文檔問題,php5.1後,兩者行為是一致的)

  2. 未定義的變數 (!$undefined會產生error,empty($undefined)則返回true) 和isset類似,這個特性對於訪問複雜結構的數組或對象成員的時候特別友好(empty($arr['userModel']->userFriends)

  3. php5.5之前,empty只接受變數,不接受運算式(比如函數的返回結果empty(getSomething())

評論裡也有人說了,因為empty是語言結構,並沒有函數調用的巨大開銷,所以兩者的效能的差異不會太大,另外現代PHP對於這種小的開銷也已經最佳化地很好了,所以這裡不怎麼需要考慮效能。結合上面的分析來說,empty是優於!的,除非你的php版本比較老,而又需要對錶達式直接判斷,不希望多加一個變數

但是,如果你並不知道你手裡的東西是不是數組,建議參考 @dreamans 的答案,考慮$arr並非數組的情境做合適的處理。

因為is_array並不具有empty的耐受未定義的特性,我推薦這種寫法empty($arr) && is_array($arr)
能夠嚴謹地支援各種情境

if(empty($undefined) && is_array($undefined));//未定義變數if(empty($arr['userModel']->userFriends) && is_array($arr['userModel']->userFriends));//(潛在)未定義成員//或者反向情境,判斷有內容數組,結合運算式的能力if(!empty($things = getSomething()) && is_array($things));

當然,更好的風格是用typehinting代替is_array,一定是array且一定定義過,情況好得多

關於官方手冊中empty行為描述的不完整,已經補充評論了,各位有空幫忙upvote

if (count($arr)) {    // 數組不為空白}

效果完全一樣

寫代碼要嚴謹:

if(is_array($arr) && !$arr) {     do something}

答案寫到評論裡面了。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.