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 属性结果正常。