提问者:小点点

找不到PHP命名空间PDO


不幸的是,我面临着一个至今无法解决的问题。 我在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'] );
        }
    }

使用composer,我正在自动加载这个类:

{
    "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已安装并工作。


共2个答案

匿名用户

问题已经被编辑过了,但是对于那些想直接找到答案的人来说,这里是。。。

您应该为方法中的对象使用正确的名称空间,要么“使用”它们,要么以根名称空间作为它们的前缀;

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

匿名用户

如果您使用PDO,那么您应该在要使用类PDO的文件中添加use PDO,在创建对象PDO的文件中添加示例,在每个模型文件中添加行。