Как получить доступ к переменной родителя из дочерней функции в PHP?

Это мой код :

<?php
class DB {

  public $config = array('DBUSER'=>'root',
                  'DBPASS'=>'',
                  'DBHOST'=>'localhost',
                  'DBNAME'=> 'ninjacks');


   function get_connection() {
    try {
    $db = new PDO('mysql:host='.$this->config['DBHOST'].'; dbname='.$this->config['DBNAME'].'; charset=utf8'
                  , $this->config['DBUSER'], $this->config['DBPASS']);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $ex) {
        echo 'An Error occured! '.$ex->getMessage(); //user friendly message
        return false;
    }

    return $db;
   }
}
?>

<?php
require_once('database.php');

class Base {
   protected $conn;
   protected $db;
   function __construct() {

        $this->db = new DB();
        $this->conn = $this->db->get_connection();
   }
}
?>


<?php
include_once('base.php');

class Session extends Base{

  function __construct() {
    parent::__construct();
  }


  public function connexion($email, $password){
    $sql = "SELECT email, password
            FROM users
            WHERE actif = '1' AND hash = NULL AND email = :email AND password = :password";

    $sth = $this->db->prepare($sql);
    $sth->execute(array(':email' => $email, ':password' => md5($password)));
    $count = $sth->rowCount();

    if($count > 0)
      return true;
    else
      return false;
  }
}
?>

В моей функции соединения, я всегда получаю эту ошибку при использовании $this->db->prepare(); :

Использование $this, когда не в контексте объекта

Я прочитал много форумов, прежде чем разместить здесь, и я также пытался 2 часа.

1 ответ

  1. Причина его не работает, потому $this->db->prepare()что не существует как $this->dbэкземпляр вашего класса DB, который не имеет prepare()метода. Вместо этого вам нужно назвать это так $this->conn->prepare()