PHP缺少“未定义”类型的解决方法

时间:2019-01-15 12:14:19

标签: php

让我说我上课

class Animal {
    public $name;
    public $group;
}

然后我这样做:

$animal = new Animal;
$animal->name = 'mouse';

如何确定未设置$ group而不仅仅是NULL?

有时,该值故意为NULL,我需要两种方式都知道。令人讨厌的是,PHP似乎没有未定义的类型,即使将值设置为NULL,isset()也会返回false。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

没有任何方法可以区分这些。 “无值”的默认值为null,并且确实没有 other “无值”值。您应该使用适合类型的默认值来初始化值,例如0用于整数。在不可能的情况下,您不必区分“未初始化”和“无值”,因为它们应该是同义词(即就PHP而言;如果您确实需要区分这些,您需要其他解决方法。

答案 1 :(得分:0)

然后不要使用预定义的类,像json_decode一样将数据反序列化为数组或stdClass。

$json = '{"name":"mouse","group":null}';

$obj = json_decode($json);
var_dump(property_exists($obj, 'group')); #true
var_dump(property_exists($obj, 'group2')); #false

$arr = json_decode($json, true);
var_dump(array_key_exists('group', $arr)); #true
var_dump(array_key_exists('group2', $arr)); #false

您还可以将结果包装到您的班级中

class Animal
{
    private $obj;

    public function __get($name)
    {
        return $this->obj->{$name};
    }

    public function __isset($name)
    {
        return isset($this->obj) && property_exists($this->obj, $name);
    }
}

$animal = new Animal;
var_dump(isset($animal->group));