empty

  1. 函數說明
    實際執行的是源碼中的 i_zend_is_true 函數

    /**
     * 使用一個字符串分割另一個字符串
     * @param mixed $val 變量或表達式
     * @return bool
     */
    empty ( $val )
  2. 實現流程

    1. 判斷參數
      IS_NULL: true
      IS_LONG, IS_BOOL, IS_RESOURCE: 可以理解爲 int,爲 0 時返回 true
      IS_DOUBLE: 轉換爲 IS_LONG,即 float轉換爲 int
      IS_STRING: 如果長度爲 0,或者爲 “0” | ‘0’,返回 true
      IS_ARRAY: 如果數組長度爲 0,返回 true
      IS_OBJECT: ???

    2. 執行邏輯
      按不同參數執行即可

  3. 實現代碼

    <?php
    function myEmpty($val) {
        if (is_null($val)) {
            return true;
        }
    
        switch ($val) {
            case is_bool($val):
            case is_int($val):
            case is_float($val):
                $result = ($val == 0);
                break;
            case is_string($val):
                //"" == null 但 is_null("")==false
                $result = ($val === "" || $val === "0");
                break;
            case is_array($val):
                $result = (sizeof($val) == 0);
                break;
            default:
                $result = true;
        }
    
        return $result;
    }
    var_dump(empty(null));
    var_dump(empty(0));
    var_dump(empty(0.0));
    var_dump(empty(00));
    var_dump(empty('0'));
    var_dump(empty('0.0'));
    print "\n";
    var_dump(myEmpty(null));
    var_dump(myEmpty(0));
    var_dump(myEmpty(0.0));
    var_dump(myEmpty(00));
    var_dump(myEmpty('0'));
    var_dump(myEmpty('0.0'));
    print "\n";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章