如图:
上图的判定,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