能否写类似 isset empty 自定义php 方法

isset 和 empty 可以传入 undefined 参数返回bool而不报错
例如 isset($a['a'])
如何自定义一个这样的方法

 /**
     * 依次从参数中获取默认值
    */
    public static function df(){ 
        foreach(func_get_args() as $v){
            if( $v===0 || $v===false ||   !empty($v))return $v;
        }
        return '';

    }

之前思考默认值试过以下写法,结果某些版本php不支持,便放弃了,一度怀疑php是最好的语言

$b=($a+['a'=>1])['a']
慕田峪9158850
浏览 401回答 1
1回答

Smart猫小萌

echo $a ?? null; // 检查 $a 是否存在,不存在返回 null 上面是变量,下面是数组用法 $arr = ['a' => 1]; $a = $arr['a'] ?? null; // 检查 $arr 数组中的 a key 值是否存在,不存在返回 null $b = $arr['a']->b ?? null; // 检查 $arr 中 a key 值是否存在,不存在返回 null,如果存在检查 $arr['a'] 对象中是否存在 b, 不存在返回 null。 上面所有的默认是都是 null,当然,你可以选择其他值。 重点来了: 这是补充答案,看了好几遍才看懂题主的意图,不用怀疑,php 就是世界上最好的语言,不报错的方法很简单。 <?php $b = @$a; // 可以看到,我并没有生命 $a, `$b = null` $c = @$arr['a']; // 一样,默认值 null $d = @$obj->d; // 一样,默认值 null $e = @$arr['a']->e; // 都是可以的 比如,我们有一个数组,$arr, 我们要在 if 里面判断 $arr->a->b 如果存在执行进入if,如下: $arr = [ 'c' => true ]; if (!! @$arr['a']['b']) {} 缺点嘛,用 @ 屏蔽了警告。其次,就是题主说的自定义一个 isset 这样的函数出来,是不可能的。因为自定义函数参数里面的值其实是表达式,运行优先级在函数之前,如果把表达式采用字符串方式传递,就又出现一个难题了,就是变量作用域问题如何解决。
打开App,查看更多内容
随时随地看视频慕课网APP