2

如何从命名空间中访问标准内部类?

namespace foo;

class Bar{
    public function __construct(){
        $connect = new \PDO('mysql:host='.$host.';dbname='.$name, $user, $pass);
    }
}

我收到一个错误

failed to open stream PDO.php

我有适用于我的自定义类的自动加载器代码。如何让自动加载器忽略内部类?

我指的是这个链接,我的代码基于此:

http://www.php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.globalclass

编辑:

所以如果我放这样的东西,它似乎工作正常。但是,如果我不能在自己的课堂上使用它,那又有什么意义呢?如何根据类属性使参数动态化?

namespace foo;
$connect = new \PDO('mysql:host='.$host.';dbname='.$name, $user, $pass);
class Bar{
    public function __construct(){
        //$connect = new \PDO('mysql:host='.$host.';dbname='.$name, $user, $pass);
    }
}
4

2 回答 2

1

几个建议

首先是将 PDO 文件直接包含在您的课程中。令人反感,我知道,但有时是必要的。

第二个选项将是首选。在别处创建您的 PDO 实例,然后将您的实例传递给该类。如果您这样做,以后会减少混乱,因为您只会创建一次连接,而不是多次。

namespace foo;
use PDO;
class Bar{
    /** @var \PDO */
    protected $pdo;

    public function __construct(){
        $this->pdo = new PDO('mysql:host='.$host.';dbname='.$name, $user, $pass);
    }
}
于 2013-10-29T00:22:36.017 回答
1

我一直在大量使用带有内部 PHP 类的命名空间,上面的第一个代码应该可以正常工作,而且确实如此(我试过)。您的 PDO 扩展可能被禁用或配置错误。

您是否检查过 PDO 是否可用?查看 PDO 类是否存在。

echo class_exists('PDO') ? "PDO exists\n" : "No PDO\n";

如果没有,您要么必须启用它,要么使用--with-pdo-mysql.

于 2013-10-29T02:28:30.733 回答