我正在开发一个必须使用CommandService类处理数据的套接字侦听器。
CommandService.php
<?php
namespace Application\Service;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorAwareTrait;
class CommandService implements ServiceLocatorAwareInterface
{
use ServiceLocatorAwareTrait;
}
custom.php
<?php
include('../module/Application/src/Application/Service/CommandService.php');
?>
当我在控制台上运行时
php custom.php
我收到错误: 致命错误:接口&Zend \ ServiceManager \ ServiceLocatorAwareInterface&#39;在第7行的C:\ wamp \ www \ nutirent \ module \ Application \ src \ Application \ Service \ CommandService.php中找不到
所以,如果有人能给我一些建议,如果不将custom.php作为课程,我怎能运行,我会很高兴。
答案 0 :(得分:3)
如果您没有使用任何自动加载系统(即作曲家的自动加载器),那么您有责任加载所有依赖项。
因此,在这种情况下,仅加载 CommandService 是不够的,您还需要加载(包括) Zend \ ServiceManager \ ServiceLocatorAwareInterface 以及所有其他依赖项: )
所以我强烈建议考虑使用autoloader;)
答案 1 :(得分:1)
阿里的回答是完全正确的,我只是想谈谈ServiceLocatorAwareInterface:
前段时间,我在我的服务中忠实于ServiceLocatorAwareInterface
。现在我不太确定。你必须考虑这个:
让服务中的ServiceLocator使它们无用。
因为服务定位器就是这样,你不能再说出你的课程所依赖的东西,因为可能是一切。 您应该使用Dependancy注入,并使用Factories加载您的服务所需的任何内容,Factories是您可以使用ServiceLocator的唯一地方,这是它所属的地方。
Ocramius说,这比我现在想说的要好,所以我在这里链接他的工作:
这激发了我的灵感。我也希望你。