如何从命名空间中访问标准内部类?
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);
}
}
答案 0 :(得分: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);
}
}
答案 1 :(得分:1)
我一直在使用内部PHP类的命名空间,上面的第一个代码应该可以正常工作,它确实(我试过)。有可能您的PDO扩展被禁用或配置错误。
您是否检查过PDO是否可用?查看PDO类是否存在。
echo class_exists('PDO') ? "PDO exists\n" : "No PDO\n";
如果没有,您必须启用它或使用--with-pdo-mysql
重新编译PHP。