У меня возникла проблема с переменной из суперкласса. См. Два класса ниже:Не удается получить правильный доступ к родительской переменной
abstract class StaticEndpoint {
// API Arguments
protected $arguments;
// PDO Object
protected $PDO;
public function __construct($args) {
$this->arguments = $args;
try {
$this->PDO = new PDO('mysql:dbname=dbname;host=127.0.0.1','user', 'pass');
$this->PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->PDO->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
public abstract function executeAll();
public abstract function executeList();
public abstract function executeOne();
}
class Endpoint extends StaticEndpoint {
public function __construct($args) {
parent::__construct($args);
}
public function executeAll() {
}
public function executeList() {
global $status,$response;
$stmt = parent::PDO->prepare("SELECT id,name FROM users");
$stmt->execute();
$users = $stmt->fetch(PDO::FETCH_ASSOC);
$status['code'] = 200;
$status['message'] = "Success";
$response = $users;
}
public function executeOne() {
}
}
Однако это не сработает. Я получаю следующую ошибку: Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in /path/to/file/Endpoint.php on line 19
. Строка 19 - $stmt = parent::PDO->prepare("SELECT id,name FROM users");
. Я попытался заменить эту строку и использовать $stmt = $this->PDO->prepare("SELECT id,name FROM users");
, но это приводит к следующей ошибке Notice: Undefined property: Endpoint::$PDO in /path/to/file/Endpoint.php on line 19
. Каков правильный способ доступа к переменной из суперкласса?
Он должен быть «parent :: $ PDO' - вам нужен' ''. Но '$ this-> PDO' предпочтительнее, если у вас нет свойства' $ PDO' в обоих классах и необходимо специально обходить локальный, чтобы добраться до родителя. – Barmar