使用MySQLi fetch_object函数实例化一个类时,我遇到了问题......也许我只是错了。
我有一个CustomerAddress类而不是扩展Address类:
class Address {
private $street;
private $city;
private $zip;
private $state;
public function getStreet(){
return $this->street;
}
}
class CustomerAddress extends Address {
private $fName;
private $lName;
public function getNames(){
return $this->fName;
}
}
function getCustomerAddresses($someID){
$db = "db connection here";
$query = "SELECT `street`, `city`, `zip`, `state`, `fName`, `lName` ...";
$stmt = $db->prepare($query);
$stmt->bind_param("i", $someID);
$stmt->execute();
$result = $stmt->get_result();
while($obj = $result->fetch_object("CustomerAddress")){
var_dump($obj);
}
//...
}
var_dump返回:
object(CustomerAddress)#32 (23) {
["fName":"customeraddress":private]=>
string(4) "John"
["lName":"customeraddress":private]=>
string(5) "Smith"
["street":"address":private]=>
NULL
["city":"address":private]=>
NULL
["state":"address":private]=>
NULL
["zip":"address":private]=>
NULL
["street"]=>
string(11) "Some Street"
["city"]=>
string(7) "Anytown"
["state"]=>
string(10) "Some State"
["zip"]=>
string(5) "12345"
}
据我所知,它不会填充父类中的变量,而是创建新的变量。当然,这只是我对继承的愚蠢或者使用fetch_object不正确,因为我找不到其他人遇到这个问题(我也没有遇到过常规类这样做的问题)。
答案 0 :(得分:2)
这是因为您声明了变量private
。请尝试改为protected
。
private
表示只有声明类才能访问变量。由于Address
中的变量是私有的,CustomerAddress
子类无法访问它们。在尝试创建fetch_object()
时,这可能会影响CustomerAddress
。
protected
意味着"只有这个类和子类"有权访问,这似乎是你需要的。