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";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章