2013-10-31 60 views
13

我正面临着一个我迄今为止不能解决的问题。我创建了一个database classapp/db/mysql/database.php具有以下内容:找不到PHP命名空间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']); 
     } 
    } 

使用作曲家,我自动加载这个类:

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

其中产生autoload_classmap.php如:

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

现在,当一切正常,我总是得到一个与PDO有关的错误:

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

我认为问题来自namespace因为当我把类放入索引页时,我没有任何错误。 PDO已安装并正常工作。

+0

哦,我看到你自己解决了。删除我的回答 –

+0

@DamienPirsy更好地恢复它。无论是整个问题都必须删除或有答案,以减少未回答的问题列表。 –

+0

删除这个问题对我来说听起来更好听(因为它本来可以避免的),或者OP可以提供自己的答案并自动接受它 –

回答

33

问题已经被编辑过,但对于人谁只是直奔过来的答案,这里是..

您应该使用正确的命名空间为您的方法的对象,无论是“用”它们或以它们的根名称空间作为前缀;

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

use \PDO; 

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

或简单地;

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