如何包含扩展接口的php类

时间:2015-10-29 09:20:39

标签: php class oop zend-framework2

我正在开发一个必须使用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作为课程,我怎能运行,我会很高兴。

2 个答案:

答案 0 :(得分:3)

如果您没有使用任何自动加载系统(即作曲家的自动加载器),那么您有责任加载所有依赖项。

因此,在这种情况下,仅加载 CommandService 是不够的,您还需要加载(包括) Zend \ ServiceManager \ ServiceLocatorAwareInterface 以及所有其他依赖项: )

所以我强烈建议考虑使用autoloader;)

答案 1 :(得分:1)

阿里的回答是完全正确的,我只是想谈谈ServiceLocatorAwareInterface:

前段时间,我在我的服务中忠实于ServiceLocatorAwareInterface。现在我不太确定。你必须考虑这个:

  

让服务中的ServiceLocator使它们无用。

因为服务定位器就是这样,你不能再说出你的课程所依赖的东西,因为可能是一切。 您应该使用Dependancy注入,并使用Factories加载您的服务所需的任何内容,Factories是您可以使用ServiceLocator的唯一地方,这是它所属的地方。

Ocramius说,这比我现在想说的要好,所以我在这里链接他的工作:

Ocramius Zf2 best Practises

这激发了我的灵感。我也希望你。