奇怪的是需要路径错误

时间:2013-01-15 09:59:24

标签: php namespaces

我的自动加载器功能遇到了一个非常奇怪的问题。

这是我的自动加载器功能,取自PSR-0 standard

function __autoload($className) {

    $className = ltrim($className, '\\');
    $fileName = '';
    $namespace = '';
    $lastNsPos = strrpos($className, '\\');
    if ($lastNsPos) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require dirname(__FILE__) . DIRECTORY_SEPARATOR . $fileName;
}

我对该函数所做的唯一修改是将dirname(__FILE__)添加到require函数,因为我将此函数保存在名为includes的目录中,其中包含我的所有其他函数课程保持不变。这段代码适用于我的另一个项目,所以我不确定这里出了什么问题。

我有一个文件:includes\SQL\Persistable.php,其名称空间声明为namespace SQL;。当自动加载器运行时,它会给我这个错误:

Warning: require(/home/user/public_html/phpProject/includes/Persistable.php): failed to open stream: No such file or directory in /home/user/public_html/phpProject/includes/config.php on line 52

我知道 文件不存在,但我不确定为什么要加载它。应该要求/home/user/public_html/phpProject/includes/SQL/Persistable.php。但是,当我像这样更改require函数时(只是为了测试):

require dirname(__FILE__) . DIRECTORY_SEPARATOR . ' ' . $fileName;

我明白了:

Warning: require(/home/user/public_html/phpProject/includes/ SQL/Persistable.php): failed to open stream: No such file or directory in /home/user/public_html/phpProject/includes/config.php on line 52

我不确定为什么添加空格,或者实际上除了正斜杠之外的任何字符都会导致require函数包含$fileName的第一部分。我也尝试过:

echo dirname(__FILE__) . DIRECTORY_SEPARATOR . $fileName;

输出结果是:

/home/user/public_html/phpProject/includes/SQL/Persistable.php

然而,require函数显然没有这样解释。为什么呢?

我还尝试了__DIR__,通过set_include_path()显式设置包含路径,将该功能放在自己的单独文件中并包含它,realname(),它们都没有工作。正如我所说,此代码之前已经有效,所以我不确定为什么我现在想出这个问题!

1 个答案:

答案 0 :(得分:0)

违规陈述是取得预备陈述的结果:

$stmt->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, 'Persistable');

将其更改为:

$stmt->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\SQL\Persistable');

帮助解决问题...但现在我面临着PDO的问题,这是另一个问题。