【问题标题】:PhpStorm auto-complete support for unknown object properties managed by Pimple?PhpStorm 自动完成对 Pimple 管理的未知对象属性的支持?
【发布时间】:2016-05-02 19:49:55
【问题描述】:

我在一个由 Silex 提供支持的应用程序中有以下代码:

$uknownObj->unkownRef

$uknownObj 是一个依赖注入容器。

我知道unkownRef 是实例MyCoolObj

现在我如何告诉 IntelliJ / PhpStorm 来帮助我自动完成这个对象?

【问题讨论】:

  • 可能的解决方法:将 unknownRef 分配给局部变量并使用 /** @var MyCoolObj */ 对其进行注释
  • 如何创建$unknownObj
  • @Piskvor,所有 DI 容器都有这种气味。缺乏提示是 Silex 应用程序中最烦人的事情。
  • @Álvaro González:这不是的复制品。这是对变量的类型提示,这是对成员变量的类型提示(对象的类不是简单地通过静态分析推断出来的)。
  • 您能否编辑问题并反映有关 Silex 依赖容器的实际信息。这是一个基本的信息!如果您需要修补框架核心或类似的东西,通用解决方案将毫无用处。

标签: php intellij-idea phpstorm silex pimple


【解决方案1】:

您可以按照 xmoex 的建议使用 phpdoc cmets,也可以使用 instanceof 断言类型:

【讨论】:

  • 想知道为什么有人会否决它,如果它有效,它就有效。我个人比文档中的注释更喜欢它,因为如果我们打赌/知道对象是某个实例,我们实际上可以运行检查,为什么不呢。
  • 是的,很高兴知道。我经常使用它来抛出InvalidArgumentException
【解决方案2】:

只需将unkownRef 分配给一个变量并提供这样的注释。

/** @var MyCoolObj $obj */
$obj = $uknownObj->unkownRef;

【讨论】:

  • 这个答案如何有资格投反对票?请解释一下。
  • -1 的最可能原因是您需要为此使用中间变量。如果在此范围内多次使用它是可以的.. 但对于一次性使用来说非常烦人(为了满足 IDE 不必要的代码)。
  • @LazyOne 你的理由是有道理的,但问题没有指定范围。
【解决方案3】:

您可以在容器类中使用 phpdoc,这是我在 Slim 框架中使用的:

/**
* @property-read \Monolog\Logger logger
* @property-read \Slim\Views\Twig view
* @property-read \PDO db
*/
class Container extends PimpleContainer implements ContainerInterface
{
}

【讨论】:

  • 现在最好的解决方案可能是使用 php 7
【解决方案4】:

我刚刚通过在项目根目录中创建 _ide_autocomplete.php 文件解决了这个问题,我刚刚创建了一个虚拟类,其中所有的苗条容器键作为属性。 然后在我的路线中,一开始我只是放了一个这样的 phpblock

/** @var Dummy $this */

我的源代码是文章在https://blog.shaharia.com/slim-php-framework-phpstorm-ide-autocompletion-solution/

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多