2015-07-15 4 views
1

У меня проблема. У меня есть 2 класса (RouteController и BaseController). В классе BaseController у меня включено подключение pdo и работа. И в классе RouteController у меня есть расширение BaseController, и я хочу, чтобы соединение также работало в классе RouteController. Но если я делаю var_dump(), он возвращает NULL. Как я могу это сделать?extended pdo connection возвращает null

Index.php:

<?php 

ini_set('display_errors', true); 
error_reporting(E_ALL); 

require_once 'App/Config.php'; 
require_once 'App/Controllers/BaseController.php'; 
require_once 'App/Controllers/RouteController.php'; 
require_once 'App/Controllers/DatabaseController.php'; 

$connection = new DatabaseController($config['database']['host'], $config['database']['user'], $config['database']['pass'], $config['database']['name']); 
$connection = $connection->Connection(); 

new BaseController($connection); 
new RouteController; 

Вот классы:

DatabaseController

<?php 

class DatabaseController 
{ 
    private $host; 
    private $user; 
    private $pass; 
    private $name; 

    public function __construct($host, $user, $pass, $name) 
    { 
    $this->host = $host; 
    $this->user = $user; 
    $this->pass = $pass; 
    $this->name = $name; 
    } 

    public function Connection() 
    { 
    try { 
     $this->db = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->name, $this->user, $this->pass); 
     $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 
     $this->db->exec("SET CHARACTER SET utf8"); 
     return $this->db; 
    } catch(PDOException $e) { 
     die($e->getMessage()); 
    } 
    } 
} 

BaseController

<?php 

class BaseController 
{ 
    protected $connection; 

    public function __construct($connection) 
    { 
    $this->connection = $connection; 
    } 
} 

RouteController

<?php 

class RouteController extends BaseController 
{ 
    public function __construct() 
    { 
    var_dump($this->connection); // Return NULL 
    } 
} 

Мне нужна помощь, пожалуйста, спасибо. Извините за мой плохой английский.

+0

PHP не вызывает конструктор в родительских классах автоматически. вы должны сами называть их, например. 'function __construct() {parent :: __ construct(); } ': http://php.net/manual/en/language.oop5.decon.php –

ответ

0

попробовать с этим кодом:

<?php 

class RouteController extends BaseController 
{ 
    public function __construct($connection) 
    { 
    parent::__construct($connection); 
    var_dump($this->connection); // Return NULL 
    } 
} 

$myObject = new RouteController($con); 

UPDATE:

<?php 

class BaseController 
{ 
    private $connection; 

    public function __construct($connection) 
    { 
    $this->connection = $connection; 
    } 

    public function getConnection() { 
     return $this->connection; 
    } 
} 

class RouteController extends BaseController 
{ 
    public function __construct($connection) 
    { 
    parent::__construct($connection); 
    /* some other construct code */ 
    } 
} 

$test = 'hello'; 
$myObject = new RouteController($test); 
var_dump($myObject->getConnection()); 

этой работой

+0

Это не работает, потому что теперь $ connection является неопределенной переменной – Avea

+0

, вы отправляете $ connection при создании объекта и когда вы выполняют конструкцию 'parent :: __ ($ connection);' вы передаете соединение с родительской конструкторской функцией. – Oscargeek

+0

Посмотрите, я обновил поток и добавил свой index.php там, у меня есть соединение. – Avea