这是我的php课程:
class Category {
private $cat_id;
private $cat_name;
private $cat_is_main;
private $cat_parent;
function __get($key) {
switch ($key) {
case 'cat_id':
return $this->cat_id;
case 'cat_name':
return $this->cat_name;
case 'cat_is_main':
return $this->cat_is_main;
case 'cat_parent':
return $this->cat_parent;
}
}
function __set($key, $value) {
switch ($key) {
case 'cat_id':
$this->cat_id = (int) $value;
break;
case 'cat_name':
$this->cat_name = (string) $value;
break;
case 'cat_is_main':
$this->cat_is_main = (bool) $value;
break;
case 'cat_parent':
$this->cat_parent = (int) $value;
break;
}
}
}
$conn = new mysqli($server, $username, $password, $dbname);
if ($result = $conn->query('SELECT cat_id, cat_name FROM categories WHERE cat_id = 1;')) {
var_dump($result->fetch_object('Category'));
}
我得到了:
object(Category)#5 (4) {
["cat_id":"Category":private]=> string(1) "1"
["cat_name":"Category":private]=> string(9) "test data"
["cat_is_main":"Category":private]=> string(1) "1"
["cat_parent":"Category":private]=> string(1) "0"
}
我期待的是:
object(Category)#1 (4) {
["cat_id":"Category":private]=> int(1)
["cat_name":"Category":private]=> string(9) "test data"
["cat_is_main":"Category":private]=> bool(true)
["cat_parent":"Category":private]=> int(0)
}
在创建新对象时,似乎mysqli_fetch_object()不使用我的__set()方法。它只是我私人财产的设定价值 这在PHP中是正常的吗?我还能做些什么来得到我想要的东西吗? 谢谢!
答案 0 :(得分:1)
当mysqli_fetch_object()
创建一个对象时,它首先创建一个stdClass
,首先设置所有属性,然后将对象的类切换为您提供的类,然后运行构造函数。正如您所注意到的那样,__set()
方法不会被调用,但这是正常的,只是函数的工作原理。