继承类的fetch_object

时间:2015-09-02 18:29:55

标签: php oop mysqli

使用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不正确,因为我找不到其他人遇到这个问题(我也没有遇到过常规类这样做的问题)。

1 个答案:

答案 0 :(得分:2)

这是因为您声明了变量private。请尝试改为protected

private表示只有声明类才能访问变量。由于Address中的变量是私有的,CustomerAddress子类无法访问它们。在尝试创建fetch_object()时,这可能会影响CustomerAddress

另一方面,

protected意味着"只有这个类和子类"有权访问,这似乎是你需要的。