PHP版本:7.2.9
前提:类型里面的属性权限设置成 private 或 protected ,然后声明魔术方法 __get() 允许访问这些变量。
使用:通过声明后的对象可以直接访问 private 或 protected 的属性,可是通过 empty() 判断为空。public 的属性判断为非空。
<?php class classA{ private $a = 'a'; protected $b = 'b'; public $c = 'c'; public function __get($name) { // TODO: Implement __get() method. if(in_array($name, ['a', 'b'])){ return $this->$name; } } } $obj = new classA(); echo '$obj->a=', $obj->a, PHP_EOL; echo '$obj->b=', $obj->b, PHP_EOL; echo '$obj->c=', $obj->c, PHP_EOL; echo 'empty($obj->a)=', var_export(empty($obj->a), true), PHP_EOL; echo 'empty($obj->b)=', var_export(empty($obj->b), true), PHP_EOL; echo 'empty($obj->c)=', var_export(empty($obj->c), true), PHP_EOL;
运行结果:
$obj->a=a $obj->b=b $obj->c=c empty($obj->a)=true empty($obj->b)=true empty($obj->c)=false
总结:
empty() 判断 private、protected 属性一直为空。
empty() 判断 public 属性结果正常。