【问题标题】:How to include php class that extends an interface如何包含扩展接口的 php 类
【发布时间】:2015-10-29 09:20:38
【问题描述】:

我正在开发一个套接字侦听器,它必须使用 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

我得到错误: 致命错误:在第 7 行的 C:\wamp\www\nutirent\module\Application\src\Application\Service\CommandService.php 中找不到接口“Zend\ServiceManager\ServiceLocatorAwareInterface”

因此,如果有人能给我一些建议,我将如何在不将 custom.php 作为类的情况下运行它。

【问题讨论】:

    标签: php class oop zend-framework2


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      阿里的回答完全正确,我只想说一下ServiceLocatorAwareInterface:

      前段时间,我在我的服务中是ServiceLocatorAwareInterface 的忠实粉丝。现在我不太确定。你必须考虑这一点:

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

      因为服务定位器就是这样,所以你不能再说你的类依赖于什么,因为可能是一切。 您应该改用依赖注入,并使用工厂加载您的服务所需的任何内容,工厂是您可以使用 ServiceLocator 的唯一地方,这是它所属的地方。

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

      Ocramius Zf2 best Practises

      这启发了我。我也希望你。

      【讨论】:

      猜你喜欢
      • 2020-11-14
      • 1970-01-01
      • 2021-08-22
      • 2010-12-01
      • 1970-01-01
      • 2017-01-21
      • 2012-09-01
      • 2013-03-19
      • 2019-01-06
      相关资源
      最近更新 更多