我只是为我的客户做一些项目,可能我在文档中发现了一些错误或错误的描述。
我想要建立一个模型,什么是通过自定义类重新生成结果,所以我使用了custom_row_object方法。
class UserModel extends CI_Model {
public function __construct(){
parent::__construct();
$this->load->library('Class_loader'); /custom spl loader
}
public function get_user_by_email($email, $password = null){
$this->db->where('email',$email);
$result = $this->db->get('User');
return $result->custom_row_object(0,'User');
}
}这是我的班级
class User {
private $idUser;
private $password;
private $email;
private $role;
public function __construct() {
echo 'instancja';
echo $this->password;
}
public function __set($name, $value) {
if ($name === 'password') {
$this->password = '****' // only for testing purposes :)
}
}
} 基于信息这里,我理解CI不应该直接访问这个属性,应该调用__set方法。
但是我很困惑,因为没有任何自定义构造函数,而且我的__set方法应该只修改一个密码属性--但是它不会,CI直接从数据库返回已经设置好的属性的对象!我唯一能做的修改就是添加一个构造函数,并在其中做如下修改
public function __construct(){
$this->password = '****';
}所以问题是-怎么可能?CI是使用了某种反射机制,还是我太笨了,而且我理解了文档错误?
发布于 2019-07-13 07:38:17
您可以在底层驱动程序中找到答案。
您可能使用mysql作为数据库,使用pdo / mysqli作为驱动程序。
在这两种情况下- Codeigniter使用fetchObject或fetch_object (MySQLi)方法。您可以在官方的Codeigniter上找到PDO 这里和MySQLi 这里的代码行。
如果您现在看一下文档- it cleary状态
PDO:
获取对象时,将从相应的列值分配其属性,然后调用其构造函数。
MySQLi:
mysqli_fetch_object()将作为对象返回当前行结果集,其中对象的属性表示结果集中找到的字段的名称。 注意,mysqli_fetch_object()在调用对象构造函数之前设置对象的属性。
资料来源- PHP文档:
https://stackoverflow.com/questions/57015457
复制相似问题