これが私の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では正常ですか?欲しいものを手に入れるために他にできることはありますか?
ありがとう!