2016-01-24 85 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