Подтвердить что ты не робот

PHP-пространство имен PDO не найдено

Я столкнулся с проблемой, которую я до сих пор не смог решить. Я создал database class в app/db/mysql/database.php со следующим содержимым:

<?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 установлен и работает.

4b9b3361

Ответ 1

Вопрос уже был отредактирован, но для людей, которые просто идут прямо к ответам, вот оно..

Вы должны использовать правильные пространства имен для объектов в своих методах, либо "использовать" их, либо префикс их с корневым пространством имен;

<?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);