2015-09-02 54 views
0

我在使用MySQLi fetch_object函數實例化一個類時遇到了問題......也許我只是想解決這個問題。繼承類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

您的代碼如何將'getCustomerAddresses'函數與兩個類連接?我沒有看到任何地方創建的對象。 – Maximus2012

+0

你想要做的是什麼? – Maximus2012

+0

我正嘗試用我的數據庫中的字段填充CustomerAddress類。這就是我使用fetch_object的原因。 – chrisjacob

回答

2

這是因爲您聲明瞭變量private。嘗試使用它們代替protected

private意味着只有聲明類可以訪問變量。由於Address中的變量是私有的,因此CustomerAddress子類無法訪問它們。當它嘗試創建CustomerAddress時,這可能會影響fetch_object()

protected另一方面意味着「只有這個類和子類」纔有權訪問,這似乎是您需要的。