empty()
函数用于检查一个变量是否为空,如果变量为空,则返回 true
,否则返回 false
。对于对象属性,空的定义取决于属性的可见性。
在 PHP 中,对象的属性有公有(public)、私有(private)和受保护(protected)三种可见性。公有属性可以直接从对象外部访问,而私有属性和受保护属性不能直接从对象外部访问。
当使用 empty()
函数检查一个对象的属性时,如果属性是私有的或受保护的,不管在对象内部有无赋值,那么 empty()
函数会返回 true
,因为从对象外部无法直接访问到这个属性,也无法确定这个属性是否有值。
class MyObject {
private $property;
public function __construct($value = null) {
$this->property = $value;
}
public function __get($key)
{
if(isset($this->{$key}))
{
return $this->{$key};
}
else
{
throw new \Exception("Property does not exist: " . get_class($this) . "::" . $key);
}
}
}
$object = new MyObject('value');
$property = $object->property; // 从对象外部获取属性值
var_dump(empty($object->property),empty($property));//true,false 因为属性是私有的