empty()關注的是變數是否是empty的一個判斷。
這個判斷在上下文中,強調的是變數的內容在判斷之前,最好是沒有任何的值。
在這樣的假設下,empty的內涵就容易理解了。
變數不存在:當然沒有值
變數存在,但是為NULL:雖然值還沒有初始化,也滿足沒有值這樣的要求。
變數存在,不為NULL,但是值是各種型別的起點值,比如0,"0","",false,array()等等:也滿足沒有值的要求。此時,已起點值表示了變數的值在後續的動作中,至少是從歸零開始的。
由此可見,empty,實際是個貫穿維度的函式。涉及了多個維度:
維度1:變數不存在
維度2:變數存在,但未初始化,或為NULL
維度3:變數存在,值為表示起點的具體的值
這幾個維度不在一個層面上,有點遞進的意思。
isset,關注的是維度3。
這個判斷,是希望後續的操作時,這個變數中是否有一個有意義的值。
變數不存在,是沒有意義的。所以返回FALSE.
變數存在,為NULL,也是沒有意義的。所以返回FALSE.
變數存在,不為NULL.即使值位表示起點的值,比如0,‘0’等,也是有意義的。表示了工作已經可是開展。所以返回TRUE。
所以,!empty,強調了變數的內容是個有意義的非起點的值。
而iset,強調變數的內容,僅是起點值,也是有意義的。
所以set的範疇,實際= !empty+起點值。
可見,isset()&&!empty()的內涵,實際是由!empty()來決定的。
那麼,為什麼建議在!empty之前要用isset?
原因很簡單,empty對維度1的操作是無意義的。而isset對3個維度都有意義。
這就意味著,首先用isset來去掉對維度1的懷疑,之後在維度2和3上,再強調維度3的內容。
總結下:
不存在 NULL 起點值 非起點值
empty empty empty !empty
!isset !isset isset isset
注:empty($var),當var變數不存在時,php不報警。
empty()關注的是變數是否是empty的一個判斷。
這個判斷在上下文中,強調的是變數的內容在判斷之前,最好是沒有任何的值。
在這樣的假設下,empty的內涵就容易理解了。
變數不存在:當然沒有值
變數存在,但是為NULL:雖然值還沒有初始化,也滿足沒有值這樣的要求。
變數存在,不為NULL,但是值是各種型別的起點值,比如0,"0","",false,array()等等:也滿足沒有值的要求。此時,已起點值表示了變數的值在後續的動作中,至少是從歸零開始的。
由此可見,empty,實際是個貫穿維度的函式。涉及了多個維度:
維度1:變數不存在
維度2:變數存在,但未初始化,或為NULL
維度3:變數存在,值為表示起點的具體的值
這幾個維度不在一個層面上,有點遞進的意思。
isset,關注的是維度3。
這個判斷,是希望後續的操作時,這個變數中是否有一個有意義的值。
變數不存在,是沒有意義的。所以返回FALSE.
變數存在,為NULL,也是沒有意義的。所以返回FALSE.
變數存在,不為NULL.即使值位表示起點的值,比如0,‘0’等,也是有意義的。表示了工作已經可是開展。所以返回TRUE。
所以,!empty,強調了變數的內容是個有意義的非起點的值。
而iset,強調變數的內容,僅是起點值,也是有意義的。
所以set的範疇,實際= !empty+起點值。
可見,isset()&&!empty()的內涵,實際是由!empty()來決定的。
那麼,為什麼建議在!empty之前要用isset?
原因很簡單,empty對維度1的操作是無意義的。而isset對3個維度都有意義。
這就意味著,首先用isset來去掉對維度1的懷疑,之後在維度2和3上,再強調維度3的內容。
總結下:
不存在 NULL 起點值 非起點值
empty empty empty !empty
!isset !isset isset isset
注:empty($var),當var變數不存在時,php不報警。