PHP empty() 判断类 private、protected 属性注意

阅读数: 562 2019年03月05日

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

phpriji.cn | 网站地图 | | 沪ICP备17015433号-1