“新PDO”& __autoload函数奇怪的行为

时间:2014-01-06 14:47:48

标签: php pdo autoload

我已经制作了一个__autoload函数(在autoload.php中):

function __autoload($name) {
    $arrName = explode('_', $name);
        $typename = strtolower(array_shift($arrName));
        $moduleName  = strtolower(array_shift($arrName));
    if(count($arrName) > 0 ){
        $className = strtolower(array_shift($arrName));  
    } else {
        $className = $moduleName;
    }   
    $location = '' . $typename . '/' . $moduleName . '/' . $className . '.php';
    include_once($location);
}

(我正在使用MVC(模型视图控制器)结构)。

我正在调用“新PDO”(在database.php中):

private static $pdo;

        private static function getDB() {
            self::$pdo = new PDO("mysql:host=localhost;dbname=something",'something','something');
            return self::$pdo;
        }

它给我一个这样的错误:

  

警告:include_once(pdo // .php):无法打开流:没有这样的文件   或目录   第15行的controller / autoload / autoload.php

     

警告:include_once():无法打开'pdo // .php'以包含它   (include_path ='。:/ usr / lib / php:/ usr / local / lib / php')in   第15行的controller / autoload / autoload.php

     

致命错误:未找到“PDO”类   第7行的controller / core / database.php

我尝试过使用“new \ PDO”,但这并没有改变任何东西。 我也试过使用“使用PDO”,但这给了我更多的错误,也许我错了。

感谢。

1 个答案:

答案 0 :(得分:0)

我已经解释了评论中发生了什么:

// This gives array(1) { [0]=> string(3) "PDO" }
$arrName = explode('_', $name);

// This gives string(3) "pdo"
$typename = strtolower(array_shift($arrName));

// This gives string(0) ""
$moduleName  = strtolower(array_shift($arrName));

// This returns FALSE
if (count($arrName) > 0 )
{
  $className = strtolower(array_shift($arrName));  
}

else
{

  // This gives string(0) ""
  $className = $moduleName;

}

// This gives string(9) "pdo//.php"
$location = '' . $typename . '/' . $moduleName . '/' . $className . '.php';

但是,正如我假设您正在使用(或至少尝试使用)PHP Data Objects扩展名,您需要确保它是installed