SPL_AUTOLOAD_REGISTER重写PHP扩展

时间:2015-05-28 11:07:11

标签: php pdo namespaces spl-autoload-register

我已经为php编写了一个快速自动加载脚本,虽然看起来好像自动加载正在覆盖php扩展等等。

我正在为pdo创建一个数据库类,我需要在类中实现PDO。这个问题是PHP认为PDO是一个与我的数据库类位于同一名称空间的类。

的index.php;

use database\db;
require_once "core/inc.php";
$db = DB::instance();

芯/ inc.php;

spl_autoload_register(function($a) {
    $file;
    if(file_exists($file = dirname(__DIR__) . DIRECTORY_SEPARATOR . "module" . DIRECTORY_SEPARATOR . str_replace("\\", DIRECTORY_SEPARATOR, strtolower($a)) . ".php"))
        require_once $file;
});

模块/数据库/ db.php中;

namespace database;
$this->_pdo = new PDO('mysql:host=' . $config->get('database/ip') . ';dbname=' . $config->get('database/db'), $config->get('database/un'), $config->get('database/pw'));

我之前在PHP中没有真正触及名称空间,所以我无法找到一个可行的解决方案。虽然我还没有成功完成这项任务,但我一直在研究相当多并试图找到解决办法。

任何帮助将不胜感激,
欢呼声。

1 个答案:

答案 0 :(得分:1)

告诉您的代码PDO在全局(\)命名空间中,而不在指定的命名空间中

namespace database;
$this->_pdo = new \PDO('mysql:host=' . $config->get('database/ip') . ';dbname=' . $config->get('database/db'), $config->get('database/un'), $config->get('database/pw'));