回覆列表
  • 1 # 使用者9300522060171

    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不報警。

  • 中秋節和大豐收的關聯?
  • 喝酸奶究竟能減肥還是加肥?