加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

phpstorm生成类型为提示的setter

发布时间:2020-12-13 13:07:39 所属栏目:PHP教程 来源:网络整理
导读:在phpstorm中,您可以通过alt insert为类成员生成一个setter方法. setters选择变量来制作setter方法. 但是,即使phpstorm知道变量的类型/类,它也不会在参数列表中插入类型提示. 如何使phpstorm生成带有类型提示的setter,但仅适用于类型hintable类型? 示例类 c
在phpstorm中,您可以通过alt insert>为类成员生成一个setter方法. setters>选择变量来制作setter方法.

但是,即使phpstorm知道变量的类型/类,它也不会在参数列表中插入类型提示.

如何使phpstorm生成带有类型提示的setter,但仅适用于类型hintable类型?

示例类

class CodeGenerationTest {
    /* @var DateTimeInterface */
    private $date;
    /* @var int */
    private $num;
}

所需的生成的setter应该是:

/**
 * @param DateTimeInterface $date
 */
public function setDate(DateTimeInterface $date)
{
    $this->date = $date;
}

/**
 * @param int $num
 */
public function setNum($num)
{
    $this->num = $num;
}

setNum是正确的,但生成的setDate缺少参数的类型提示:

/**
 * @param DateTimeInterface $date
 */
public function setDate($date)
{
    $this->date = $date;
}
您需要在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
}

实际上,由于php primitive list实际上很短,因此可以检测它是否是原始类型.

所以:

class CodeGenerationTest {

        /**
         * @var DateTimeInterface
         */
        private $date;

        /**
         * @var int
         */
        private $num;
    }

实际上会生成这个:

/**
     * @var DateTimeInterface $date
     */
    public function setDate(DateTimeInterface $date)
    {
        $this->date = $date;
    }

    /**
     * @var int $num
     */
    public function setNum($num)
    {
        $this->num = $num;
    }

您可以在此处找到有关模板变量的帮助:
https://www.jetbrains.com/phpstorm/webhelp/file-template-variables.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读