goa*_*oat 7 php code-generation phpstorm
在phpstorm中,您可以通过alt+ insert> setters>选择变量来为类成员生成setter方法来生成setter方法.
但是,即使phpstorm知道变量的类型/类,它也不会在参数列表中插入类型提示.
如何让phpstorm生成带有类型提示的setter,但仅限于类型hintable类型?
示例类
class CodeGenerationTest {
/* @var \DateTimeInterface */
private $date;
/* @var int */
private $num;
}
Run Code Online (Sandbox Code Playgroud)
所需的生成的setter应该是:
/**
* @param DateTimeInterface $date
*/
public function setDate(DateTimeInterface $date)
{
$this->date = $date;
}
/**
* @param int $num
*/
public function setNum($num)
{
$this->num = $num;
}
Run Code Online (Sandbox Code Playgroud)
setNum是正确的,但setDate生成时缺少参数的类型提示:
/**
* @param DateTimeInterface $date
*/
public function setDate($date)
{
$this->date = $date;
}
Run Code Online (Sandbox Code Playgroud)
Pie*_*ard 19
您需要在PhpStorm中更改PHP Setter方法的模板以指定类型提示.
打开PhpStorm的首选项和"文件和代码模板"菜单,在"代码"选项卡下有一个名为"PHP Setter Method"的选项.修改它看起来像这样:
#set($typeHintText = "$TYPE_HINT ")
## First we check against a blacklist of primitive and other common types used in documentation.
#set($nonTypeHintableTypes = ["", "string", "int", "mixed", "number", "void", "object", "real", "double", "float", "resource", "null", "bool", "boolean"])
#foreach($nonTypeHintableType in $nonTypeHintableTypes)
#if ($nonTypeHintableType == $TYPE_HINT)
#set($typeHintText = "")
#end
#end
## Make sure the type hint actually looks like a legal php class name(permitting namespaces too) for future proofing reasons.
## This is important because PSR-5 is coming soon, and will allow documentation of types with syntax like SplStack<int>
#if (!$TYPE_HINT.matches('^((\\)?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+)+$'))
#set($typeHintText = "")
#end
## Next, we check if this is using the array syntax like "MyClass[]", and type hint it as a plain array
#if ($TYPE_HINT.endsWith("[]"))
#set($typeHintText = "array ")
#end
/**
* @param ${TYPE_HINT} $${PARAM_NAME}
*/
public ${STATIC} function set${NAME}($typeHintText$${PARAM_NAME})
{
#if (${STATIC} == "static")
self::$${FIELD_NAME} = $${PARAM_NAME};
#else
$this->${FIELD_NAME} = $${PARAM_NAME};
#end
}
Run Code Online (Sandbox Code Playgroud)
实际上,由于php原语列表实际上很短,因此可以检测它是否是原始类型.
所以:
class CodeGenerationTest {
/**
* @var DateTimeInterface
*/
private $date;
/**
* @var int
*/
private $num;
}
Run Code Online (Sandbox Code Playgroud)
实际上会生成这个:
/**
* @var \DateTimeInterface $date
*/
public function setDate(\DateTimeInterface $date)
{
$this->date = $date;
}
/**
* @var int $num
*/
public function setNum($num)
{
$this->num = $num;
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到有关模板变量的帮助:https: //www.jetbrains.com/phpstorm/webhelp/file-template-variables.html
| 归档时间: |
|
| 查看次数: |
2851 次 |
| 最近记录: |