「本文屬於基礎內容,看到的同學檢查一下自己的程式碼有沒有出現同樣的問題
」
小Q又帶著問題來了,今天的問題估計是大多數同志都會犯的問題。
問題是在使用ThinkPHP時查詢傳回的結果判斷是否為空。
是不是很有自信,這有什麼不知道的,不就是empty嘛!如果你是這樣認為的,那還是把文章簡單的看完哈!
「這個問題的緣由就是對框架查詢資料庫傳回的結果是什麼型別不明確,知道了型別就是一個非常簡單的問題。
」
然後使用ThinkPHP框架來查詢這個表的資料
小Q給你三秒鐘思考,這裡會回傳什麼值。要么返回暫無數據,要么返回用戶表的數據。
小Q毫不思索的說肯定會回傳暫無數據,因為user表根本就沒有數據。
那麼來看一下列印的結果是什麼。
小Q睜大了眼睛看也沒有看到暫無資料四個字,而是回傳了一空數組(暫且這麼認為)。
「這裡是暫時認為這就是空數組,其實只是長得像數組罷了,真的資料結構是結果集。至於什麼是結果集,就自行百度哈!
」
這時候小Q懵了啊!怎麼會這樣呢!在小Q強烈的要求下列印了date的資料
回傳結果仍然還是一個空數組(暫且這樣認為)
那麼判斷一個陣列是否為空肯定得是empty()來進行判斷的,對吧!
小Q自信十足的點了點頭,這次肯定沒有問題,這種寫法我都寫了好幾年了,就是用empty來進行判斷的。
為了讓小Q看見骨灰盒在落淚,喀喀爾只能在對這個值進行一次是否為空的判斷。
程式碼如下
小Q臉上洋溢著無比燦爛的笑容,我都不忍心去點擊請求按鈕。
無奈與小Q的期望,殘忍的按下了請求按鈕。
看到了上邊的回傳結果,小Q臉上的笑容頓時戛然而止,隨之迎來的就是滿臉質疑的大臉盤子。
再一次的檢查了寫的判斷程式碼是否有問題。
老夫縱橫沙場幾十年,複製貼上,拿起鍵盤就是乾的實力怎麼可能會把這個代碼寫錯。
小Q終於坐不住了,笑嘻嘻的問,這是怎麼回事!
終於要來到重點了,請繼續看怎麼讓小Q明白這其中的道理的。
#此刻急需來偵測一下返回的這data到底是不是我們堅持的數組,接下來檢測一下。
於是拿起鍵盤敲了八下,那就是is_array這個函數。
再一次的發起請求
此時小Q的表情就是這樣的,這下是真的凌亂了
於是我不慌不忙的打開官網的文檔,給小Q看了一眼
官網明確的說明資料回傳的結果就是資料集,而且在5.1的版本是直接預設的。
再繼續往下看,你會看到額外的方法都有什麼,第一個認識不,是否為空。
小Q驚呆的說了一句,臥槽,不會是用這種方式來判斷的吧!
是不是偵測一下就可以了。
小Q終於一把鼻涕一把淚的說,我以為我眼睛出問題了呢!
明明是空資料怎麼就判斷不出來呢!長長的出了一口氣。
「小Q一臉迷茫的看了我一眼,說了一句,自從使用了5.1框架後,所有的判斷都是這樣寫的。 小Q緊忙的著小跑了出去,只說了一句話,趕緊在線上沒有出現問題前把程式碼修復好,要不我就下崗了。
」
解決了小Q 的問題, 接下來聊點其它的。
解決了小Q的問題就來聊點正經話題。
在上文中存在一個遺漏問題,那就是empty,在PHP中判斷數組是否為空就是使用的empty。
這一點小Q是堅定不移的認為是這個樣子的,那麼這種用法在框架中還能用嗎?
那肯定是沒有問題的啊!看下圖
回傳結果一定跟預想的是一樣的,真理永遠都是真理。
##送給小Q的總結,精華總是那麼的簡單。
使用find查詢時,如果結果為空回傳結果是null,那麼判斷可以使用!使用select查詢時,如果結果為空,則傳回結果是一個空的結果集,可以使用結果集額外的函數toArray()進行轉換為數組,然後使用empty進行判斷。然而如果就使用結果集進行判斷的話就是$data->isEmpty()提供的函數來判斷即可。來進行判斷
以上是老司機竟然在判斷返回結果上翻車了(ThinkPHP)的詳細內容。更多資訊請關注PHP中文網其他相關文章!