这是一个主观问题,我需要您对编码标准和格式化实践的感受和想法。
PHP Zend编码标准需要编写如下的多行函数调用:
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
我认为以下方法更具可读性:
$returnedValue = $object->longMethodName($argument1,
$otherArgument,
42);
因为左侧只有一行,这表明这只是一个语句,参数更接近方法名称。
你更喜欢哪一个?
答案 0 :(得分:14)
第二种方法会给您留下一个额外的问题:线长。 Zend编码标准建议“任何PHP代码行的最大长度为120个字符。”
这意味着如果你想要好的(长的,描述性的)变量名称,并且碰巧有一个用于返回值,对象,一个好的命名函数和一个长参数,你更有可能达到120个字符限制。
除此之外,根据您的标准,最大长度可能只有80个Chars或介于两者之间。
此外,如果重复使用,我更喜欢第一个
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
$returnedValue = $object->longMethodName($argument1,
$otherArgument,
42);
$returnedValue = $object->longMethodName($argument1,
$otherArgument,
42);
$returnedValue = $object->longMethodName($argument1,
$otherArgument,
42);
$returnedValue = $object->longMethodName($argument1,
$otherArgument,
42);
像Pekka说的那样,少了眼睛跳跃。
答案 1 :(得分:10)
我更喜欢第一种方法。后者需要更多的打字,并且更加紧张眼睛IMO。我认为眼睛 - 至少是人类的“西方”,从左到右的阅读部分 - 当到达当前的那一行时往往会跳到下一行的开头,并且有太多的空白区域跳过第二个例子。它可能在语义上不是100%正确,但提供了良好的阅读流程。
答案 2 :(得分:3)
我喜欢PEAR的标准,它主张你的第一个例子
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
但我可能会为这么短的参数做一遍:
$returnedValue = $object->longMethodName(
$argument1, $otherArgument, 42
);
编辑:哦!而对于恒星的例子:
$notInlined = longInlinedMethod($argFoo, $argBar) + otherLongInlinedMethod();
$returnedValue = $object->longMethodName(
$arg1, $notInlined, $arg3, $arg4
);
while ($val) {
someStatement();
}
答案 3 :(得分:2)
在你提供的两个中,我更喜欢第一个。
如果有编码标准,我会遵循它。但是,在我的工作中没有,我更喜欢以下内容:
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
对我来说,更容易看到有一个变量赋值被完成(因为参数和右括号的缩进方式。使用Zend标准,你必须实际查找等号才能看到它是一个赋值,否则它可能与普通的多行函数调用混淆。
还有一条评论......如果超过120个字符,我的函数调用只会变成多行。任何超过120个字符的内容都不会在我的IDE中以1600x1200分辨率显示,并且Workspace浏览器和Code Navigator窗格打开。
这行代码只有74个字符,所以我会这样做:
class myClass
{
public function myFunction(...)
{
$returnedValue = $object->longMethodName($argument1, $otherArgument, 42);
}
}
答案 4 :(得分:1)
既不?选项A可能令人困惑,因为单缩进用于代码块。选项B存在长参数名称和/或深度缩进代码的问题。
我更喜欢继续参数列表的双缩进。
例如,根据erenon的要求:
$returnedValue = $object->longMethodName(
$arg1, longInlinedMethod($argFoo, $argBar) + otherLongInlinedMethod(),
$arg2, $arg3);
while ($val) {
someStatement();
}
答案 5 :(得分:1)
我通常使用First,但是在同一行上使用右括号或者至少与上面的缩进相同。
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42
);
$returnedValue = $object->longMethodName(
$argument1,
$otherArgument,
42);
对我来说,这似乎可以避免在嵌套时出现混乱。
然而:我在vim中的压头开始做同级别(2,上面),我喜欢它。我在需要包装帮助的长行上打破了它,但总的来说,如果你主要是扫描方法名而不是参数,我认为它会导致代码可读。
顺便说一下,对嵌套的布尔语句进行那种缩进也很有效。
如果它们不是太长,我也会在一行上对论点进行分组,这对于分组是有意义的。
答案 6 :(得分:1)
我更喜欢第一种,原因有两个: