如图:
上图的判定,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() 方法如果存在的话,它将会被调用。
之前就是没有写__isset这个魔术方法导致的。具体情况,可能新手还是看不懂,反正问题解决了就行了。
魔术方法的使用参考:
http://www.kancloud.cn/webxyl/php_oop/68883