【发布时间】:2018-04-15 23:15:08
【问题描述】:
我的所有用户方法都有以下类:
class User {
protected $_db,
$_data;
public function __construct($user = null, $findby = 'id') {
$this->_db = DB::getInstance();
if (!$user) {
........
} else {
........
}
}
.......
public function login($username = null, $password = null) {
$user = $this->find($username, 'username');
if ($user) {
$lockdown = new Lockdown;
}
}
public function find($param = null, $method = null) {
if ($param && $method) {
$data = $this->_db->query("SELECT * FROM users ...");
if ($data->count()) {
$this->_data = $data->result();
return true;
}
}
return false;
}
public function data() {
return $this->_data;
}
}
以上是我的用户类的完全精简版。我还有另一个扩展用户的类(锁定):
class Lockdown extends User {
public $getAttempts;
public function __construct() {
var_dump($this->data());
die();
}
}
但是,当我在登录类中调用锁定类时,即使数据对象应该包含所有用户信息,var_dump() 也只是返回 NULL。
根据我调用登录类时的计算,find 方法 应该设置 $_data = USER INFO,因此应该允许在 ($this->find( )) 能够访问相同的数据方法。
我仍在学习 OOP 编程,所以不知道我是否缺少某些东西,但我似乎无法理解 Lockdown 类在应该继承它时在数据方法上返回 NULL 的原因。
【问题讨论】:
-
嗨@mic,感谢您的回复。我已将 User::__construct() 类添加到原始问题中,并且看不到调用它如何帮助填充 _data 变量。请问为什么 _data 变量没有被填充,因为代码似乎表明应该在调用 Lockdown 之前执行 data 方法?
-
在 Lockdown 的 __construct() 中,您需要在调用 var_dump 之前添加 parent::__construct()
-
只要我将用户名提供给 __construct() 方法,parent::__construct() 就可以工作。现在所有的工作谢谢。然而还有一件更快捷的事情,为什么当我的方法都不是静态的时它是 parent::__construct()?
-
@MatthewM 你需要注意 tereško 的回答。
-
传入
$this作为构造函数参数?你是疯了还是只是妄想?