本篇重點
- 使用 empty()、is_null()、isset() 或是直接使用if ($variable) 判斷式來判斷變數或陣列是否存在
- 資料檢查甚麼時候會有錯誤訊息(php error)
在開發動態網頁時,後端程式扮演了一個重要的角色,可能會處理來自前端程式的資料,也有可能處理來自資料庫的資料,在這種情況下,我們必須嚴謹地檢查數據的完整性,以確保後續的程式能夠順暢運行。那麼有哪些函數能夠進行這樣的檢查?
首先先了解各種類型的判斷,判斷的類型有
- 無效值(null)
- 布林值(boolean)
- 字串(string)
- 數值(integer)
- 陣列(array)
判斷差異表
比較不同的function在各種情況下的判斷
型態 | if ($x) | empty() | isset() | is_null() | |
---|---|---|---|---|---|
$x = null | null | false | true | false | true |
$x is undefined | null | false | true | false | true |
$x = true | boolean | true | false | true | false |
$x = false | boolean | false | true | true | false |
$x = ‘’ | string | false | true | true | false |
$x = ‘1’ | string | true | false | true | false |
$x = ‘0’ | string | false | true | true | false |
$x = ‘-1’ | string | true | false | true | false |
$x = ‘hello’ | string | true | false | true | false |
$x = ‘true’ | string | true | false | true | false |
$x = ‘false’ | string | true | false | true | false |
$x = 1 | integer | true | false | true | false |
$x = 0 | integer | false | true | true | false |
$x = -1 | integer | true | false | true | false |
$x = 666 | integer | true | false | true | false |
$x = array() | array | false | true | true | false |
$x = array(‘a’, ‘b’) | array | true | false | true | false |
if ($x)
和empty()
的判斷結果相反isset()
和is_null()
的判斷結果相反
範例
- 用戶填寫表格資料並送出資料,這些資料會從前端傳到後端程式,此時我們需要驗證是否有填入資料或是資料是否正確
1 |
|
- 情境一,填寫年齡 30 傳入後端,isset() 為 true,且 intval() 後數值大於零,$age = 30 往下接續處理
- 情境二,填寫年齡 0 傳入後端,isset() 為 true,但 intval() 後數值等於零,$age = 0 返回前端處理
- 情境三,無填寫年齡傳入後端,isset() 為 false,$age = 0 返回前端處理
- 從資料庫撈取資料,並檢測是否有資料,如果為無資料需要做處理
- 情境一,從資料庫撈取會員資訊,並取得完整資料
1 |
|
- 情境二,從資料庫撈取會員資訊,但沒有撈到資料寫入空陣列
1 |
|
- 情境三,從資料庫撈取會員資訊,但沒有撈到資料寫入字串
1 |
|
錯誤訊息
在進行資料完整性檢查時,要確保資料的完整性,但又不希望出現錯誤訊息,那麼應該採用哪種函數?
這四種驗證方式除了兩兩相反外,還有一個很重要的差異 “錯誤訊息” 也就是PHP error。
當變數 $x
沒有被賦值時,使用 if ($x)
和 is_null($x)
會引發錯誤訊息,但使用 isset($x)
和 empty($x)
不會,不過這些錯誤屬於較輕微的 E_NOTICE
級別,所以在沒有開啟PHP的所有錯誤提示的情況下是不會對網頁造成影響,但還是應該盡量處理這些錯誤。
範例
- 情境一,檢查陣列中不存在的索引
1 |
|
- 情境二,判斷不存在的變數
1 |
|
- 情境三,有個陣列內的值需要做處理,但這個值不一定存在,如果不存在就不需要處理
1 |
|
結論
依不同的需求,使用function 來判斷變數或陣列的完整性。
if ($x)
和empty($x)
的判斷結果相反isset($x)
和is_null($x)
的判斷結果相反
無設定 $x
值的狀況下
if ($x)
和is_null($x)
會跳錯誤訊息isset($x)
和empty($x)
則不會跳錯誤訊息
檢查完整性可以減少 bug 的發生,不用修 bug 就是開心😆~
你平常會檢查變數或陣列的資料完整性嗎? 是用甚麼方法處理呢? 歡迎留言跟大家分享!