2016-01-24 84 views
0

我有兩個類; userFunctionuserDatabase通過類擴展的PHP類變量繼承

class userDatabase { 
     protected $database = 'btc.db'; 
     protected $short; 
     protected $salt; 
     function __construct(){ 
      $this->short = $this->salt = bin2hex(random_bytes(6)); 
     } 
} 
class userFunction extends userDatabase { 
    function __construct(){ 
     $this->database.PHP_EOL; 
     $this->short.PHP_EOL; 
     $this->salt.PHP_EOL; 
    } 
} 

$r = new userFunction; 
var_dump($r); 

輸出如下:

object(userFunction)#1 (3) { 
    ["database":protected]=> 
    string(6) "btc.db" 
    ["short":protected]=> 
    NULL 
    ["salt":protected]=> 
    NULL 
} 

這不正是我所期待的。據推測我設置了$this->short$this->salt從二進制數據生成一個隨機的6字符隨機十六進制鹽。我擴展了userDatabase類以繼承變量到userFunction,我希望能夠通過中的$this->salt$this->short調用userFunction。但是,變量返回爲NULL

我一直在尋找答案,爲什麼這是,但我似乎無法正確制定查詢,因爲我真的不知道這裏發生了什麼。 This seems to be a related issue, but I'm not entirely sure.具體來說,是否有可能完成我試圖以這種特定方式做的事情? $this->salt$this->short的每個實例在每個類中都是相同的,還是兩者都不相同?我該如何解決我的NULL問題,在這裏?

我很感謝幫助。

+1

什麼是'$ this-> database.PHP_EOL'應該在做什麼?它沒有設置任何值,它不顯示任何東西 –

+0

至少做這個$ this-> short。= PHP_EOL; –

+0

'$ this-> database'實際上是:'protected $ database ='myDatabase.db';'。所以這是我測試的一部分,以確保我可以訪問變量作爲預期的跨類,這似乎與這個特定的實例一起工作,而不是'$ this-> short'或'$ this-> salt'。 – zQueal

回答

3

當您在孩子中覆蓋__construct(或任何其他方法)時,父母的方法不會被調用 - 除非您明確這樣做。

class userFunction extends userDatabase { 
    function __construct(){ 
     parent::__construct(); 
     $this->database.PHP_EOL; 
     $this->short.PHP_EOL; 
     $this->salt.PHP_EOL; 
    } 
} 
+0

是的,我打算說。你必須調用userFuction構造函數內的父構造函數。 –

+0

我感覺很糟糕,但添加'parent :: __ construct();'似乎完美運行。謝謝你的時間! – zQueal