【发布时间】:2012-12-26 06:17:44
【问题描述】:
我有一个使用 PDO 的 DB 包装类,并在构造函数中创建了一个 PDO 对象。包装类在我们的命名空间中,我们正在使用自动加载器。问题是在我们的命名空间中找不到 PDO 类,所以我尝试使用全局命名空间,如 here 所述。
//Class file
namespace Company\Common;
class DB {
private function __construct(){
$this->Handle=new PDO(...);
}
}
有了这个,我得到了这个(如预期的那样):
Warning: require(...\vendors\Company\Common\PDO.class.php): failed to open stream
如果我这样做:
namespace Company\Common;
use PDO;
我明白了:
Fatal error: Class 'DB' not found in ...\includes\utils.php
并且 utils.php 在错误行中包含了这个,在实现命名空间之前它工作得很好:
DB::getInstance();
我也试过这个:
namespace Company\Common;
class DB {
private function __construct(){
$this->Handle=new \PDO(...);
}
}
它试图像最初那样在我们的命名空间中加载 PDO 类。
我该如何解决这个问题?我以为通过 use PDO 或 new \PDO 会加载全局 PDO 类,但它似乎不起作用?
【问题讨论】:
-
那个 PDO 类在什么命名空间中?
-
你在哪里调用 DB 类?
use \PDO;是正确的,问题是 elsewere。 -
@shadyyx PDO 类是 PDO 库中的全局 PDO 类。
-
您是否将 include_path 设置为也包含该 PDO 库?
-
@Glavic 我最初在一个非自动加载的文件中调用它,该文件用于实用程序功能。它只是做 DB::getInstance() 正常工作。
标签: php pdo namespaces autoload