2015-09-02 4 views
0

У меня возникла проблема при использовании функции MySQLi fetch_object для создания экземпляра класса ... и, возможно, я просто обойду все это неправильно.fetch_object по унаследованному классу

У меня есть класс CustomerAddress, чем расширяет класс Адрес:

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

Как ваш код соединяет функцию getCustomerAddresses с двумя классами? Я не вижу, как объекты создаются где угодно. – Maximus2012

+0

Что вы пытаетесь сделать точно? – Maximus2012

+0

Я пытаюсь заполнить класс CustomerAddress полями из моей базы данных. Вот для чего я использую fetch_object. – chrisjacob

ответ

2

Это потому, что вы указали переменные private. Попробуйте сделать их protected.

private означает, что только класс объявления имеет доступ к переменным. Поскольку переменные в Address являются частными, CustomerAddress подкласс не может получить к ним доступ. Это, вероятно, влияет на fetch_object(), когда он пытается создать CustomerAddress.

protected, с другой стороны, означает, что «только этот класс и подклассы» имеют доступ, который, по-видимому, необходим вам.

Смежные вопросы