首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用服务定位器更快、更好和更有效地提示PHP Storm

使用服务定位器更快、更好和更有效地提示PHP Storm
EN

Stack Overflow用户
提问于 2015-11-20 18:54:17
回答 2查看 720关注 0票数 3

我已经找了好几个月了。我是喜欢自动完成的开发人员之一。对于ZendFramework2i中的每个Service调用,输入提示如下:

没有全局提示文件

代码语言:javascript
复制
/** @var \Module\Service\SuperService $superService */ 
$superService => $this->getServiceLocator()>get('\Module\Service\SuperService');
$superService->coolFunction();

这是可行的,但是当您开始在一个控制器中获得2-4服务时,代码会变得很混乱。我试图找到一种更好的方法来使用PHP并键入提示服务定位器调用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-29 10:59:38

虽然这一点现在对您没有帮助,但您应该知道,我们已经接近于无条件地支持这一目标,但有几个条件:

  1. 容器需要实现container项目的Container\Interop\ContainerInterface,ZF2的ServiceManager已经这样做了。
  2. 您需要使用::class超级全局超魔法内容来命名和检索您的类。在您的示例中,只需将get调用中的字符串替换为Module\Service\SuperService::class (可从PHP5.4及更高版本获得)。

我预计这个功能将在我们的下一个版本PhpStorm 2016.2中提供,该版本将于夏季左右发布。

加里

票数 1
EN

Stack Overflow用户

发布于 2015-11-20 18:54:17

大约一个月前,PHP发布了一个新特性,允许静态文件用于类型提示。我个人只将它用于服务定位器,但它可以用于PHP Storm无法遵循的许多其他事情,因为它并不神奇。

带有全局提示文件

代码语言:javascript
复制
$superService = $this->getServiceLocator()->get('\Module\Service\SuperService');
$superService->coolFunction();

这为我们作为开发人员做了几件事:

  • 团队合作(其他人将能够同时看到来自所有模块的所有服务)
  • 编码
  • 速度
  • 代码整洁
  • 代码标准
  • 单击以更快的速度进入课堂。

做什么?

composer.json),项目根(与相同的位置)中,应该有一个名为.phpstorm.meta.php的文件(如果不是创建的话),该文件包含静态提示以及它们使用的实例。

要添加自己的文件,只需将其放入现有的文件中即可。

警告-如果您声明了错误的类,您最终会错误地编写代码,并混淆.这件事发生在我身上

我包括我目前的Config,这是我的项目的个人,但给予了更多的理解,以做什么。

代码语言:javascript
复制
namespace PHPSTORM_META {
    $STATIC_METHOD_TYPES = [
        \Zend\ServiceManager\ServiceLocatorInterface::get('') => [

            /**
             * Common services
             */
            'doctrine.entitymanager.orm_default' instanceof \Doctrine\ORM\EntityManager,
            'Zend\Db\Adapter\Adapter' instanceof \Zend\Db\Adapter\AdapterServiceFactory,

            /** Custom to Project */
            'RiotAdapter' instanceof \GameService\Service\RiotAdapter,
            'SmiteAdapter' instanceof \GameService\Service\SmiteAdapter,
            'GameService' instanceof \GameService\Service\GameService,

        ],
    ];
}

如果您想了解更多这方面的信息,可以查看PHP 这里中的@ confluence帖子。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33834046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档