2013-10-10 3 views
0

В настоящее время я пишу свое первое приложение PHP с использованием OOP и PDO. При этом я работаю над классом подключения, чтобы при необходимости я мог инициировать соединение с базой данных. Я считаю, что условия для того, как я это делаю, - это инъекция зависимостей.PHP - класс соединения PDO - невозможно получить

У меня возникла ошибка при попытке получить доступ к соединению.

Это мой класс соединение:

class db{ 

    private $host = ''; 
    private $dbname = ''; 
    private $username = ''; 
    private $password =''; 

    public $con = ''; 

    function __construct(){ 

     $this->connect(); 

    } 

    function connect(){ 

     try{ 

      $this->con = new PDO("mysql:host=$this->host;dbname=$this->dbname",$this->username, $this->password); 
      $this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 

     }catch(PDOException $e){ 

      echo 'We have a problem!'; 

     } 
    } 
} 

И это, как я пытаюсь вызвать его внутри других классов.

private $con; 

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

Однако это ошибка, которую я получаю при попытке запустить ее.

Catchable fatal error: Argument 1 passed to users::__construct() must be an instance of db, none given. 

Любые советы по поводу того, что я делаю неправильно, будут высоко оценены.

+2

То, что на самом деле вы не можете понять из фразы «должно быть экземпляром db, ни одного данного».? – zerkms

ответ

2

Вам нужно будет сначала создать экземпляр DB и передать его в конструкторе «Other» класса

$db = new DB(); 
$class = new OtherClass($db); 

Помимо этого, есть и другие вопросы:

Конструктор класса DB сделал не присваивать значения имени базы данных, пользователю и паролю и т. д. Один из способов сделать это - передать эти настройки в конструктор БД и присвоить значения частным свойствам.

class DB{ 

    private $host = ''; 
    private $dbname = ''; 
    private $username = ''; 
    private $password =''; 

    public $con = ''; 

    function __construct($host, $dbname, $username, $password){ 

     $this->host = $host; 
     $this->dbname = $dbname; 
     $this->username = $username; 
     $this->password = $password; 
     $this->connect(); 

    } 

    function connect(){ 

     try{ 

      $this->con = new PDO("mysql:host=$this->host;dbname=$this->dbname",$this->username, $this->password); 
      $this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 

     }catch(PDOException $e){ 

      echo 'We have a problem!'; 

     } 
    } 
} 
+0

Я удалил эти значения для размещения здесь: Я добавил экземпляр БД, однако я все равно получаю ту же ошибку. – user2865415

+0

Ошибка означает, что в качестве параметра прошло значение null. Не могли бы вы вставить код, где создается «OtherClass»? – DavidLin

+0

Я обновил класс связи, который вы обновили. Я начинаю другой класс под этим классом связи пока. Использование: \t $ con = new DB; \t $ class = новые пользователи ($ con); – user2865415

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