折雨的天空
php中empty判定一个类成员变量的问题
2016-5-3 我好笨


如图:



QQ图片20160503174505.png







上图的判定,empty会返回true。但是实际上是有值的。







源码:



QQ图片20160503174719.png







结果:



QQ图片20160503174724.png







这里有几点要说,这个$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

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容