我的PHP API库存在问题。我正在使用codeigniter框架。
我正在尝试使用我的eve_market_model中的PHPEVECentral库。如您所见,库由使用命名空间的多个文件组成。要使用该库,我只需要包含主文件PHPEVECentral。
在这里,您可以找到arborescence文件夹的屏幕截图。
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(),因为有些接口不能使用此方法。所以,也许,我应该找到一种方法来检测它是一个类文件还是一个接口文件......
答案 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