PhpStorm使用笔记

2021/10/6·4 views

代码提示优化

先看一段代码

php 复制代码
$request = \Next\Di\Context::getContainer()->get(ServerRequestInterface::class);
$get     = $request->get();

此时会发现get方法是不能点击进去的,因为ide不知道$request是个什么。

解决这个问题有三种方法:

方法一:

php 复制代码
<?php 

/** 
 * @var ServerRequestInterface $request
*/
$request = \Next\Di\Context::getContainer()->get(ServerRequestInterface::class);
$get     = $request->get();

给$request添加一个注释,说明类型是一个ServerRequestInterface,这时候ide就会有自动提示了

方法二:

使用phpstorm高级元数据(PhpStorm advanced metadata),在项目目录添加.phpstorm.meta.php 文件,内容如下:

php 复制代码
<?php 
// @formatter:off
namespace PHPSTORM_META {
    override(\Next\Di\Container::make(0), map('@'));
}

这时候,make方法的返回值类型就是make方法的第一个参数,这时候ide也会自动提示。更多高级用法参考 https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html#map

方法三:

php 复制代码
	/**
     * @template T
     *
     * @param class-string<T> $id
     *
     * @return T
     */
    public function make(string $id)
    {
    }

使用phpstorm泛型注解,可以参考文章 https://www.evget.com/article/2021/7/19/42418.html

另外再提一点关于方法注释的问题

php 越来越向强类型改变了,因此在使用高版本php的代码中,有一些注释我认为是可以去掉的,如下:

php 复制代码
if (function_exists('base_path') === false) {
    /**
     * @param string $path
     * @return string
     */
    function base_path(string $path = ''): string
    {
        return BASE_PATH . ltrim($path, '/');
    }
}

其中的

php 复制代码
    /**
     * @param string $path
     * @return string
     */

是完全可以删除的,因为函数的原型已经描述得很清楚了,参数path类型是string,返回值是string。对于方法中没有提示类型的可以加上参数类型的注释,对于抛出异常应该加注释,如果想要解释这个函数的作用

php 复制代码
/**
* balabala
*/
function base_path(string $path = ''): string
{
	return BASE_PATH . ltrim($path, '/');
}

就可以了。

实用操作

标记Excluded文件夹

Excluded的文件/文件夹是不会被索引的。可以右击某个文件夹,选择Mark Directory as -> Excluded ,这时候文件夹可能不再可见或者变更为橙色了,如果想要文件夹可见,可以双击shift,输入Show Excluded Files 点击右边的开关开启即可。