1

我对应该可以工作的 PHP API 库有疑问。我正在使用 codeigniter 框架。

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

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

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 类,添加了一个方法来递归地包含文件夹的所有文件。https://github.com/zallek/CodeIgniter/blob/master/MY_Loader.php

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

Load->file() 只是像 PHP vanilla 一样包含文件,而 Load->class() 设计为仅实例化一次类(单例)。但是我不能使用 Load->class() 因为有些接口不适用于这种方法。所以也许,我应该找到一种方法来检测它是类文件还是接口文件......

4

2 回答 2

1

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

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

您还在那里有一个示例实现。

于 2013-08-07T09:40:42.073 回答
-1

尝试使用 codeinginter Loader 类

$this->load->library('class_name', $config, '对象名')

详情

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

于 2013-08-07T09:44:33.660 回答