我尝试查找File
的声明,但PhpStorm说Cannot find declaration to go to
。
我也尝试过netbeans,它也找不到声明。
我还尝试查找别名use File;
我得到No usage found in project files
。
如果代码无法找到任何声明,我的代码如何知道它必须做什么?这对我来说毫无意义。
如何找出宣布File
的位置?
答案 0 :(得分:2)
如果代码无法找到任何声明,我的代码如何知道它必须做什么?
按using an autoloader。这基本上是一个函数,只要引用了一个未知类,就会调用它,并尝试通过根据某些命名约定包含一个文件来定义它。您需要找到特定框架如何管理它。
请注意,它可能包含您已设置为"项目"的目录之外的文件。在你的IDE中。一旦你弄清楚它在哪里,你就可以配置你的IDE来了解这些额外的文件。
如何找出宣布文件的位置?
找到使用该类的位置,使用调试器或只是"转储值并死掉",您可以使用ReflectionClass::getFilename()来查找它:
$r = new \ReflectionClass(File::class);
$r->getFilename();
请注意,File::class
语法(自PHP 5.5起可用)为您提供了类的完全限定名称,忽略了任何别名或名称空间导入。
扩展(用C编写的库,而不是PHP)也可以定义一个类。在这种情况下,ReflectionClass::getFilename()
将返回false
,您需要使用ReflectionClass::getExtensionName()
,然后跟踪该扩展程序的文档。
答案 1 :(得分:1)
Laravel在使用外墙时非常“自以为是”。
除了PHPStorm gudelines如何处理它之外,我发现artisan tinker
是一种最简单的独立于IDE的方式来熟悉新的代码库。
该命令提供了一个REPL shell,因此如果您对实际定义File
的位置感到好奇,只需调用它,从错误消息中获取一些信息:
>>> File::delete()
PHP warning: Missing argument 1 for Illuminate\Filesystem\Filesystem::delete(), called in /path/to/project/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 213 and defined in /path/to/project/app/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php on line 118
答案 2 :(得分:0)
PHPStrom扫描Project Root文件夹中的所有文件。将您使用的外部库(框架)添加到Project Root文件夹。也许你应该通过作曲家安装家属。