首頁 >php框架 >ThinkPHP >老司機竟然在判斷返回結果上翻車了(ThinkPHP)

老司機竟然在判斷返回結果上翻車了(ThinkPHP)

咔咔
咔咔原創
2021-01-08 10:14:411488瀏覽

本文屬於基礎內容,看到的同學檢查一下自己的程式碼有沒有出現同樣的問題

#前言

小Q又帶著問題來了,今天的問題估計是大多數同志都會犯的問題。

問題是在使用ThinkPHP時查詢傳回的結果判斷是否為空。

是不是很有自信,這有什麼不知道的,不就是empty嘛!如果你是這樣認為的,那還是把文章簡單的看完哈!

這個問題的緣由就是對框架查詢資料庫傳回的結果是什麼型別不明確,知道了型別就是一個非常簡單的問題。

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
老司機竟然在判斷返回結果上翻車了(ThinkPHP)

##################################################### ########資料庫很簡單就一張表user,這個表中沒有任何數據,就是一個空表。 ###
老司機竟然在判斷返回結果上翻車了(ThinkPHP)
資料庫

然後使用ThinkPHP框架來查詢這個表的資料

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
查詢程式碼

小Q給你三秒鐘思考,這裡會回傳什麼值。要么返回暫無數據,要么返回用戶表的數據。

小Q毫不思索的說肯定會回傳暫無數據,因為user表根本就沒有數據。

那麼來看一下列印的結果是什麼。

小Q睜大了眼睛看也沒有看到暫無資料四個字,而是回傳了一空數組(暫且這麼認為)。

這裡是暫時認為這就是空數組,其實只是長得像數組罷了,真的資料結構是結果集。至於什麼是結果集,就自行百度哈!

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
回傳結果

這時候小Q懵了啊!怎麼會這樣呢!在小Q強烈的要求下列印了date的資料

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
老司機竟然在判斷返回結果上翻車了(ThinkPHP)

回傳結果仍然還是一個空數組(暫且這樣認為)

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
返回結果

那麼判斷一個陣列是否為空肯定得是empty()來進行判斷的,對吧!

小Q自信十足的點了點頭,這次肯定沒有問題,這種寫法我都寫了好幾年了,就是用empty來進行判斷的。

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
老司機竟然在判斷返回結果上翻車了(ThinkPHP)

為了讓小Q看見骨灰盒在落淚,喀喀爾只能在對這個值進行一次是否為空的判斷。

程式碼如下

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
程式碼列印

小Q臉上洋溢著無比燦爛的笑容,我都不忍心去點擊請求按鈕。

無奈與小Q的期望,殘忍的按下了請求按鈕。

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
返回結果

看到了上邊的回傳結果,小Q臉上的笑容頓時戛然而止,隨之迎來的就是滿臉質疑的大臉盤子。

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
老司機竟然在判斷返回結果上翻車了(ThinkPHP)

再一次的檢查了寫的判斷程式碼是否有問題。

老夫縱橫沙場幾十年,複製貼上,拿起鍵盤就是乾的實力怎麼可能會把這個代碼寫錯。

小Q終於坐不住了,笑嘻嘻的問,這是怎麼回事!

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
老司機竟然在判斷返回結果上翻車了(ThinkPHP)

終於要來到重點了,請繼續看怎麼讓小Q明白這其中的道理的。

二、解決問題

#此刻急需來偵測一下返回的這data到底是不是我們堅持的數組,接下來檢測一下。

於是拿起鍵盤敲了八下,那就是is_array這個函數。

再一次的發起請求

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
列印結果

此時小Q的表情就是這樣的,這下是真的凌亂了

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
你以前不是這樣子的

於是我不慌不忙的打開官網的文檔,給小Q看了一眼

官網明確的說明資料回傳的結果就是資料集,而且在5.1的版本是直接預設的。

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
官網文件

再繼續往下看,你會看到額外的方法都有什麼,第一個認識不,是否為空。

小Q驚呆的說了一句,臥槽,不會是用這種方式來判斷的吧!

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
額外的方法

是不是偵測一下就可以了。

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
檢測程式碼

小Q終於一把鼻涕一把淚的說,我以為我眼睛出問題了呢!

明明是空資料怎麼就判斷不出來呢!長長的出了一口氣。

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
返回結果

小Q一臉迷茫的看了我一眼,說了一句,自從使用了5.1框架後,所有的判斷都是這樣寫的。 小Q緊忙的著小跑了出去,只說了一句話,趕緊在線上沒有出現問題前把程式碼修復好,要不我就下崗了。 老司機竟然在判斷返回結果上翻車了(ThinkPHP)

解決了小Q 的問題, 接下來聊點其它的。

三、擴展

解決了小Q的問題就來聊點正經話題。

在上文中存在一個遺漏問題,那就是empty,在PHP中判斷數組是否為空就是使用的empty。

這一點小Q是堅定不移的認為是這個樣子的,那麼這種用法在框架中還能用嗎?

那肯定是沒有問題的啊!看下圖

老司機竟然在判斷返回結果上翻車了(ThinkPHP)

回傳結果一定跟預想的是一樣的,真理永遠都是真理。

老司機竟然在判斷返回結果上翻車了(ThinkPHP)
傳回結果

  • ##送給小Q的總結,精華總是那麼的簡單。
    雖然傳回結果可以在資料庫的設定檔進行修改,但是喀喀爾是不建議修改的。
  • 既然框架已經預設為結果集,那就使用結果結果集,如果非要使用陣列那也是可以的。
    經過小Q的這個問題,需要注意以下幾點問題。
使用find查詢時,如果結果為空回傳結果是null,那麼判斷可以使用

來進行判斷

使用select查詢時,如果結果為空,則傳回結果是一個空的結果集,可以使用結果集額外的函數toArray()進行轉換為數組,然後使用empty進行判斷。然而如果就使用結果集進行判斷的話就是$data->isEmpty()提供的函數來判斷即可。
############「######堅持學習、堅持寫博、堅持分享是咔咔從業以來一直所秉持的信念。希望在偌大互聯網中咔咔的文章能帶給你一絲絲幫助。我是咔咔,下期見。######」###########################################

以上是老司機竟然在判斷返回結果上翻車了(ThinkPHP)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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