如图:
上图的判定,empty会返回true。但是实际上是有值的。
源码:
结果:
这里有几点要说,这个$individual_session是一个动态的类。来自于zend的session类,可以参考,但是重写了。
源码为:
class Zend_Session_Namespace { private $parent_obj; private $session_key; public function __construct($params='') { $this->parent_obj=isset($_SESSION[$params])?(object)$_SESSION[$params]:new stdClass(); $this->session_key=$params; } public function __get($name) { // TODO: Implement __get() method. if(isset($this->parent_obj->$name)) { return($this->parent_obj->$name); } else { return(NULL); } } public function __set($name, $value) { // TODO: Implement __set() method. $this->parent_obj->$name = $value; $_SESSION[$this->session_key][$name]=$value; }
//这个是后来加上的,加上这个,结果才对
public function __isset($name) { return isset($this->parent_obj->$name); } }
重点就在这个__isset里了。
empty在手册中有这样一个说明:
Note:
当对一个不可见的对象属性使用 empty() 时, __isset() 方法如果存在的话,它将会被调用。
魔术方法的使用参考:
http://www.kancloud.cn/webxyl/php_oop/68883
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《php中empty判定一个类成员变量的问题》
发表评论