2013-10-31 20 views
13

Tôi đang đối mặt với một vấn đề mà tôi không may không thể giải quyết cho đến nay. Tôi tạo ra một database class vào app/db/mysql/database.php với nội dung sau:Không gian tên PHP PDO không tìm thấy

<?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']); 
     } 
    } 

Sử dụng nhà soạn nhạc, tôi tự động load lớp này:

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

nào tạo ra một autoload_classmap.php như:

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

Bây giờ , khi mọi thứ hoạt động tốt, tôi luôn gặp lỗi liên quan đến PDO:

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

Tôi nghĩ rằng vấn đề xuất phát từ namespace vì khi tôi đưa lớp học vào trang chỉ mục, tôi không có bất kỳ lỗi nào. PDO được cài đặt và hoạt động.

+0

Ồ, tôi thấy bạn đã tự giải quyết. Xóa câu trả lời của tôi –

+0

@DamienPirsy sẽ khôi phục lại nó tốt hơn. Cả câu hỏi phải được xóa hoặc có câu trả lời, để giảm danh sách câu hỏi chưa được trả lời. –

+0

Xóa câu hỏi có vẻ tốt hơn với tôi (vì nó có thể tránh được ngay từ đầu), hoặc OP có thể tự cung cấp câu trả lời và tự động trả lời số –

Trả lời

33

Câu hỏi đã được chỉnh sửa, nhưng đối với những kẻ mới vừa đi thẳng qua các câu trả lời, ở đây nó là ..

Bạn nên sử dụng không gian tên chính xác cho các đối tượng trong phương pháp của bạn, hoặc "sử dụng" họ hoặc tiền tố chúng với không gian tên gốc;

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

use \PDO; 

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

hoặc đơn giản;

self::$connection = new \PDO("mysql:host=$host;dbname=$base", $user, $pass); 
Các vấn đề liên quan