这是我的吸气者:
public function __get($field)
{
if ($field == 'userId'):
return $this->uid;
else:
return $this->fields[$field];
endif;
}
这是我的构造函数
public function __construct()
{
$this->uid = null;
$this->fields = array(
'username' => '',
'password' => '',
'firstname' => '',
'lastname' => '',
'email' => '',
'is_active' => false
);
$this->session = Session::Instance();
$this->profiler = new Profiler();
$this->encrypt = new Encrypt();
}
每次我访问此功能:
private function handle_pass($password, $username=null, $encrypt=true)
{
if ($encrypt) :
return $this->encrypt->encode($password);
else:
$query = ORM::factory('user');
$result = $query
->select('password')
->where('username', $username)
->find();
$compare_pass = $this->encrypt->decode($password);
return ($compare_pass === $result->password);
endif;
}
我收到此错误
application/libraries/User.php: Undefined index: encrypt // this is the error message
application/libraries/User.php:User->__get( encrypt ) // this is the last method executed
答案 0 :(得分:1)
encrypt
是否被定义为班级中的public
变量?如果没有,那么__get()
函数的逻辑要求从$this->fields['encrypt']
读取它,这是从未设置的,并且是产生该错误的原因。
答案 1 :(得分:0)
在尝试访问encrypt属性之前,在对象上使用get_object_vars以查看它是否真的存在。还有其他事情可以继续。
var_dump(get_object_vars($myClass));
编辑:
查看代码后。永远不应该调用get()方法,因为只有在引用的属性不可访问时才会调用它。您是否将$ encrypt声明为私有?你在宣布它吗?是什么让你觉得应该调用get()? (格式化程序在我尝试使用链接将下划线放在get()前面时会发疯。
class myClass()
{
public $encrypt;
public function __construct()
{
$this->encrypt = new Encrypt();
}
public function __get($property)
{
return $this->$property;
}
public function handle_pass()
{
$this->encrypt->decode();
// Since $encrypt is public, __get() will not be invoked
}
}