我已经将编辑器代码样式设置从Editor > Code Style > PHP
设置为Predefined Style >PSR1/PSR2
。我已经安装并配置了php代码嗅探器和php混乱检测器。每当我使用CTRL+ALT+L
格式化代码时,都会遇到以下问题:
为什么?原始代码看起来是(我认为不是很有帮助,但无论如何这里是):
public function myTestFunction()
{
$is_valid = true;
if ($this->manual_value && !$this->_InputValidator->isValidString(
$this->manual_value,
1,
2,
Regex::STRING
)
) {
$is_valid = false;
}
return $is_valid;
}
最佳答案
psr2实际上并没有说一个多行if条件需要缩进,但是phpstorm显然是放进了一个缩进,因为您的行在一个if条件中,另外一个缩进是因为您的行在一个多行函数调用中。
psr2确实说多行函数调用必须缩进,但它说它们必须缩进一次。这里有记录:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#46-method-and-function-calls
所以正确的psr2代码可能是:
public function myTestFunction()
{
$is_valid = true;
if ($this->manual_value && !$this->_InputValidator->isValidString(
$this->manual_value,
1,
2,
Regex::STRING
)
) {
$is_valid = false;
}
return $is_valid;
}
但看起来不太好。
我倾向于将psr2与pear标准中的一些多行条件规则相结合,这将为您提供以下有效的psr2代码:
public function myTestFunction()
{
$is_valid = true;
if ($this->manual_value
&& !$this->_InputValidator->isValidString(
$this->manual_value,
1,
2,
Regex::STRING
)
) {
$is_valid = false;
}
return $is_valid;
}
我不知道phpstorm是否会同意这一点,但我认为它可能给出了它似乎拥有的缩进规则。
您也可以将
&&
放在第一行的末尾,而不是放在第二行的开头。我在上面发布的代码正是pear编码标准所使用的,但是psr2没有为此定义任何规则。