【问题标题】:PhpStorm not recognizing methodsPhpStorm 无法识别方法
【发布时间】:2017-07-24 21:56:39
【问题描述】:

所以这个问题已经被问了好几次了,但我还没有找到一个有效的答案。

我正在使用 PhpStorm - 2016.3.2 和 Laravel 5.4

我尝试过使用https://github.com/barryvdh/laravel-ide-helper 以及 PhpStorm 的 Laravel 插件。

我尝试检查选项“降级严重性 if_magic 方法存在于类中” - 这不起作用。

我唯一能做的就是完全关闭未定义方法的警告,但是关闭这样的功能会破坏使用 IDE 的意义。

有没有人找到解决这个问题的方法?

来源:

https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/15

https://laracasts.com/discuss/channels/general-discussion/why-does-phpstorm-not-recognise-all-the-classes?page=1

PhpStorm laravel 5 method not found

https://github.com/barryvdh/laravel-ide-helper

【问题讨论】:

  • “所以这个问题已经被问过好几次了,但我还没有找到有效的答案。” 请分享这些问题的链接——我想看看他们关于和他们提供什么。很可能它们是关于不同的事情(与您的简单案例相比)。
  • 我添加了一些我看过的地方的链接。大多数人都说同样的话
  • 谢谢。您提供的链接更多地是关于使用魔术方法的情况..或关于返回某些可以是多种类型的对象的某些函数。您在此处的情况并非特定于 Laravel - 当您以相同的方式传递任何对象实例时,您将在任何框架中看到相同的情况,甚至是您自己的代码/库。
  • 您有这里非常简单和基本的情况:您将参数传递给函数而不指定该参数是什么。要么使用 PHP 原生支持的类型提示(如 Ross Wilson 所示).. 要么使用 PHPDoc 来做到这一点(@param 标签) -- phpdoc.org/docs/latest/references/phpdoc/tags/param.html。在这种特殊情况下,不需要使用带有@var 的内联PHPDoc——以上两种方式更合适/正确;但它可以用于其他/更复杂的情况。
  • 以下帖子是否回答了您的问题,@Brad,还是您需要更多信息?

标签: php laravel laravel-5 ide phpstorm


【解决方案1】:

PHPDoc 块可以派上用场。

您可以在函数内的语句 return $query 之前添加此 PHP 注释

/** @var $query \Illuminate\Database\Query\Builder */

这样PHPStorm会正确识别方法

【讨论】:

  • 1) /** @var [Type] [$variable] */ 是正确的方法 2) 为什么不简单地使用更合适的解决方案——为实际参数键入提示(因为 $query 是以这种方式传递给该函数的)?
  • 绝对对于 1 和 2,我编写了我脑海中出现的第一个解决方案。选项二是正确的方法:)。
【解决方案2】:

发生这种情况的原因是 PHPStorm 不知道该变量的含义(它与 Laravel 无关)。据 PHPStorm 所知,它只是一个方法的参数。

正如@LazyOne 建议的那样,您可以键入提示变量,例如

public function scopeIncomplete(Builder $query)

然后在类的顶部添加以下use 语句

use Illuminate\Database\Eloquent\Builder;

或者,如果您使用的是 OS X(我不确定 Windows 或 Linux 的快捷方式),您可以移动 Builder 引用中的插入符号,然后点击 alt enter 导入类。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2017-05-25
    • 2018-03-16
    相关资源
    最近更新 更多