У меня есть следующий класс для всех моих пользовательских методов:
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.
По моим расчетам, когда вызывается класс входа в систему, метод поиска должен установить $_data = USER INFO, что, следовательно, должно позволить новому методу Lockdown, вызванному сразу после ($this->find()), выполнить иметь доступ к одному и тому же методу данных.
Я все еще изучаю ООП-программирование, поэтому не знаю, есть ли что-то, что мне не хватает, но я не могу понять причину, по которой класс Lockdown возвращает NULL в методе данных, когда он должен его наследовать.
$this
в качестве параметра конструктора? Вы сумасшедший или просто заблуждаетесь? - person tereško   schedule 03.11.2017