PHP OOP自动加载类命名空间问题

时间:2013-06-05 11:46:47

标签: php oop namespaces autoload

我正在尝试升级我正在努力遵守PSR-0的新项目的代码。

我正在使用和SPL加载器类,但是我可能做错了什么,我只是无法发现问题所在。

我一直收到以下错误:

Fatal error: Class 'widezike\General' not found in /nfs/c03/h04/mnt/169128/domains/widezike.com/html/beta/lib/functions.php on line 14

这是我的文件夹结构:

index.php
-lib
config.php
init.php
spl-class-loader.php
functions.php
    -widezike
        -General.php

这是我的函数文件,它开始与服务器端代码有关:

<?php

include 'init.php';
include 'config.php';

include 'spl-class-loader.php';

$loader = new SplClassLoader('General', 'lib/widezike');
$loader->register();

use widezike\General;

//Run the output buffer
General::ob();

所以这是我现在的代码,但我似乎无法找到造成致命错误的原因......

提前致谢

2 个答案:

答案 0 :(得分:1)

我在这里做了一些猜测,但我认为问题出在构造函数中..

$loader = new SplClassLoader('General', 'lib/widezike');

在代码linked to中,它们是命名空间和包含路径。

与我一起玩,直到它起作用我才能建议。

您可以尝试:

$loader = new SplClassLoader(null, 'lib');

或者

$load = new SplClassLoad('General', 'lib');

另一方面,我个人只是使​​用一个非常简单的spl_autoload_register函数来为我做类加载..

spl_autoload_register(function($class){

    $filename = str_replace('\\', '/', $class) . '.php';
    require($filename);

});

$object = new phutureproof\common\whatever();

然后我会有一个文件/phutureproof/common/whatever.php,内容为:

<?php
namespace phutureproof\common;

class whatever
{

}

答案 1 :(得分:0)

我意识到问题是我的名字空间是错误的,所以如果你有相同的问题,只需检查并确保你的命名空间是正确的!