让我说我上课
class Animal {
public $name;
public $group;
}
然后我这样做:
$animal = new Animal;
$animal->name = 'mouse';
如何确定未设置$ group而不仅仅是NULL?
有时,该值故意为NULL,我需要两种方式都知道。令人讨厌的是,PHP似乎没有未定义的类型,即使将值设置为NULL,isset()也会返回false。
有什么想法吗?
答案 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));