我有两节课; userFunction
和userDatabase
:
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字符随机hex salt。我扩展了userDatabase
类,将变量继承到userFunction
,我希望能够通过$this->salt
和$this->short
__construct()
内的userFunction
来调用这些变量}。但是,变量返回为NULL
。
我一直在寻找答案,为什么会这样,但我似乎无法正确地制定查询,因为我老实说不确定这里发生了什么。 。 This seems to be a related issue, but I'm not entirely sure.具体来说,是否有可能完成我尝试以这种方式做的事情?每个类中$this->salt
和$this->short
的每个实例是相同的,还是它们都不同?我如何修复NULL
问题?
我感谢您的帮助。
答案 0 :(得分:3)
当您覆盖孩子的__construct
(或任何其他方法)时,父母的方法不会被调用 - 除非您明确这样做。
class userFunction extends userDatabase {
function __construct(){
parent::__construct();
$this->database.PHP_EOL;
$this->short.PHP_EOL;
$this->salt.PHP_EOL;
}
}