2013-10-31 18 views
13

Mam do czynienia z problemem, którego niestety nie udało mi się rozwiązać do tej pory. I stworzył database class do app/db/mysql/database.php o następującej treści:Nazwy PHP Nie znaleziono PDO

<?php 
    namespace App\Database; 
    use Symfony\Component\Yaml\Yaml; 

    class Database{ 
     private static $connection = null; 

     private function __construct($host, $base, $user, $pass){ 
      try{ 
       self::$connection = new PDO("mysql:host=$host;dbname=$base", $user, $pass); 
      }catch(PDOException $e){ 
       die($e->getMessage()); 
      } 
     } 

     public static function get(){ 
      if(self::$connection !== null){ 
       return self::$connection; 
      } 
      $yaml = Yaml::parse(file_get_contents(realpath('./app') . '/database.yml')); 
      self::$connection = new Database($yaml['host'], $yaml['base'], $yaml['user'], $yaml['pass']); 
     } 
    } 

Korzystanie kompozytora, jestem samoładownicze tej klasy:

{ 
    "autoload" : { 
     "classmap" : [ 
      "app/libraries", 
      "app/db" 
     ] 
    } 
} 

wytwarzających autoload_classmap.php takich jak:

return array(
    'App\\Database\\Database' => $baseDir . '/app/db/mysql/database.php', 
    'App\\Libraries\\Parser' => $baseDir . '/app/libraries/Parser.php', 
); 

teraz , kiedy wszystko działa poprawnie, zawsze otrzymuję błąd związany z PDO:

Fatal error: Class 'App\Database\PDO' not found in /var/www/my_application/app/db/mysql/database.php on line 24 

Myślę, że problem pochodzi z namespace, ponieważ po umieszczeniu klasy na stronie indeksu, nie mam żadnego błędu. PDO jest zainstalowany i działa.

+0

Och, widzę, że sam to rozwiązałeś. Usuwanie mojej odpowiedzi –

+0

@DamienPirsy lepiej ją przywrócić. Należy skasować całe pytanie lub uzyskać odpowiedź, aby ograniczyć liczbę pytań, na które nie ma odpowiedzi. –

+0

Usunięcie tego pytania brzmi dla mnie lepiej (ponieważ można było tego uniknąć w pierwszej kolejności), lub OP może udzielić sobie odpowiedzi i automatycznie ją zatwierdzić. –

Odpowiedz

33

Pytanie zostało już edytowany, ale dla ludzi, którzy są po prostu pozycja prosto do odpowiedzi, tutaj jest ..

należy używać poprawnych nazw dla obiektów w swoich metodach, albo „użytkowania” je lub prefiksuj z główną przestrzenią nazw;

<?php 
//... namespace etc... 

use \PDO; 

self::$connection = new PDO("mysql:host=$host;dbname=$base", $user, $pass); 

lub po prostu;

self::$connection = new \PDO("mysql:host=$host;dbname=$base", $user, $pass);