2015-04-01 1 views
1

У меня возникла проблема с переменной из суперкласса. См. Два класса ниже:Не удается получить правильный доступ к родительской переменной

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. Каков правильный способ доступа к переменной из суперкласса?

+1

Он должен быть «parent :: $ PDO' - вам нужен' ''. Но '$ this-> PDO' предпочтительнее, если у вас нет свойства' $ PDO' в обоих классах и необходимо специально обходить локальный, чтобы добраться до родителя. – Barmar

ответ

2

$this->PDO - это правильный синтаксис для доступа к публичному/защищенному полю родительского класса. Эти сообщения об ошибках говорят мне, что, возможно, у вас не было конечной точки, которая правильно расширяет StaticEndpoint, когда вы получили эту ошибку.

Смежные вопросы