更改签名
更改签名重构结合了可应用于函数签名的几种不同修改。您可以使用此重构来:
更改函数名称和返回类型
添加、删除和重新排序参数
为参数分配默认值
更改参数名称和类型
通过函数调用层次传播新参数
更改函数签名时,PhpStorm 会搜索该函数的所有用法并更新所有调用、实现和覆盖替换可以安全修改以反映更改的函数。
只有PHP 和 JavaScript 支持更改签名重构(请参阅重构 JavaScript)。
默认值和新参数的传播
对于添加到函数的每个新参数,您可以在默认字段中指定默认值(或表达式) 。
您还可以将您引入的参数传播到调用您正在更改其签名的函数的函数。重构结果取决于您是否指定默认值以及是否使用传播。
传播:新参数可以传播到调用您正在更改其签名的函数的任何函数。在这种情况下,通常调用函数的签名会相应改变。但是,这些更改也取决于为新参数设置的默认值。
默认值:通常,这是要添加到函数调用的值。如果新参数未传播到调用函数,则该函数内的调用也将使用此值。如果使用传播,则此值不会影响调用函数中的函数调用。
更改函数签名
将插入符号放在要重构的函数的名称处。
按Ctrl+F6。或者,选择更改签名对话框打开。
从主菜单或上下文菜单在“更改签名”对话框中,根据您的需要对函数签名进行必要的更改:
更改函数名称。要更改名称,请编辑名称字段中的文本。
通过编辑返回类型字段的内容来更改函数返回类型。
管理函数参数。要配置参数,请使用参数区域中的表格和按钮:
要添加新参数,请单击并在相应表格行中指定新参数的属性。按下Ctrl+Space以使用代码完成。
要为参数提供默认值,这将影响函数签名,请使用Parameter字段,如下所示:
$parameterName = '参数值';要为参数提供默认值,这将影响函数的调用,请使用Default字段,如下所示:
argumentValue
。
添加参数时,您可能希望将它们传播到调用当前函数的函数。
在PHP上下文中,当从类的构造函数调用Change 签名重构时,可以将新参数初始化为类属性。为此,请使用创建和初始化类属性复选框:
选中此复选框时,新添加的参数将初始化为字段。PhpStorm 创建一个与此参数同名的字段,并添加一行具有以下赋值:
$this->parameterName = $parameterName;清除复选框时,会添加一个参数而不进行初始化。
新属性是使用默认可见性修饰符创建的,该修饰符在代码样式的代码生成选项卡上设置。设置/首选项对话框 ( )的PHP页面。Ctrl+Alt+S
要删除参数,请选择任意行并单击。
要重新排序参数,请单击和。例如,如果要将某个参数放在列表的首位,请单击该参数对应的行中的任何单元格,然后单击所需的次数。
要更改参数的类型、名称或默认值,请在参数表中进行必要的更新(在类型和参数字段中)。
沿调用当前函数的函数的层次结构传播新的方法参数(如果有)。可能有一些函数会调用您正在更改其签名的函数。这些函数又可以被其他函数调用,依此类推。您可以通过调用函数的层次结构传播对当前函数的参数所做的更改,并指定哪些调用函数应该受到影响,哪些不应该受到影响。
要传播新参数:
单击传播参数按钮。
在Select Methods to Propagate New Parameters对话框的左侧窗格中,展开必要的节点并选中您希望将新参数传播到的函数旁边的复选框。
为了帮助您选择必要的函数,调用函数和被调用函数的代码显示在对话框的右侧(分别在Caller Method和Callee Method窗格中)。
当您在左侧窗格中的功能之间切换时,右侧窗格中的代码会相应更改。
单击确定。
要在重构之前查看预期更改并进行调整,请单击Preview。
单击重构。
例子
示例 1
此示例显示了执行相同更改签名重构的 3 种不同方式。在所有情况下,该result()
函数都被重命名为,并向该函数添加了generateResult ()
一个新参数。$b
这些示例显示了函数调用、调用函数showResult()
和其他代码片段如何受到重构设置的影响。
前 | 后 |
---|---|
函数结果($a) { } 函数显示结果($a) { $this->result($a); }
| 该函数被重命名并
函数 generateResult($a,$b) { } 函数 showResult($a,$b) { $this->generateResult($a,$b); }
|
该函数被重命名,并添加了一个具有默认值的新
函数 generateResult($a,$b) { } 函数 showResult($a) { $this->generateResult($a,'new_param'); }
| |
函数被重命名,并
函数 generateResult($a,$b) { } 函数 showResult($a,$b) { $this->generateResult($a,$b); }
|
示例 2
在此示例中,我们在方法上调用Change 签名重构__construct()
并添加一个新$q
参数。结果取决于是否选中了创建和初始化类属性复选框。新字段是使用默认可见性修饰符创建的,该修饰符在代码样式的代码生成选项卡上设置。设置/首选项对话框 ( )的PHP页面。Ctrl+Alt+S
前 | 后 |
---|---|
类 ChangeSignatureNewParam { function __construct() { $a = "ChangeSignatureNewParam 中的构造函数"; 打印 $a; } }
| 创建和初始化类属性复选框被选中:
类 ChangeSignatureNewParam { 私人 $q; function __construct($q) { $a = "ChangeSignatureNewParam 中的构造函数"; 打印 $a; $this->q = $q; } }
|
创建和初始化类属性复选框被清除:
类 ChangeSignatureNewParam { function __construct($q) { $a = "ChangeSignatureNewParam 中的构造函数"; 打印 $a; } }
|