PHP命名空间错误

时间:2013-08-07 09:37:58

标签: php codeigniter namespaces

我的PHP API库存在问题。我正在使用codeigniter框架。

我正在尝试使用我的eve_market_model中的PHPEVECentral库。如您所见,库由使用命名空间的多个文件组成。要使用该库,我只需要包含主文件PHPEVECentral。

在这里,您可以找到arborescence文件夹的屏幕截图。

http://s21.postimg.org/byz3udi8n/arbo.png

namespace PHPEveCentral;

class PHPEveCentral
{
    ...

    public function MarketStat($typeid = array())
    {
        return new \PHPEveCentral\Requests\MarketStat($typeid);
    }
}

所以,当我调用PHPEveCentral-> MarketStat()函数时,我收到一个php错误:

Class 'PHPEveCentral\Requests\MarketStat' not found in C:\wamp\www\Eve-board\application\libraries\PHPEveCentral\PHPEveCentral.php on line 68

当我包含PHPEveCentral \ Requests \ MarketStat.php文件时,不再出现此错误,但我对其他文件有其他错误,所以我也必须包含它等等。

我是否必须手动包含库的每个文件?我希望还有另一种方式,因为它有点无聊。

感谢您的帮助。

修改

我扩展了CodeIgniter Loader类,添加了一个方法来recursivly包含文件夹的所有文件。 https://github.com/zallek/CodeIgniter/blob/master/MY_Loader.php

使用这种方法,我没有得到任何错误,这是有效的。唯一的问题是优化问题:

Load-> file()只包含PHP vanilla所做的文件,而Load-> class()只设计为一次类(singleton)。但我不能使用Load-> class(),因为有些接口不能使用此方法。所以,也许,我应该找到一种方法来检测它是一个类文件还是一个接口文件......

2 个答案:

答案 0 :(得分:1)

您想要设置的是所谓的自动加载。如果您正确命名文件,它将根据需要正确加载它们。

有一个名为PSR-0的标准,你可以在https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

阅读

您还有一个示例实现。

答案 1 :(得分:-1)

尝试使用codeinginter Loader类

$ this-> load-> library('class_name',$ config,'object name')

详情

http://ellislab.com/codeigniter/user-guide/libraries/loader.html