常见做法?

时间:2011-08-06 12:21:03

标签: php conditional shortcut shorthand

我一直想知道这个简写,如果我们可以称之为,这是一个公认的PHP开发人员编码的做法:

foo() && bar();

而不是

if( foo() ) {
    bar();
}

虽然IMO的单行代码更整洁,但我没有看到它在任何地方使用过。

4 个答案:

答案 0 :(得分:3)

这是许多语言的开发人员的常见做法。从技术上讲,它没有任何问题,但从它在StackOverflow上显示的次数来判断,我会继续说它是“仅在它是唯一有意义的东西时才使用”。大多数人都不期望它。

那就是说,这完全有效:

foo()?bar()?bat():zonk():baz();

按原样

foo() && bar() && baz();

请记住:

function foo(){return true;} 
function bar(){echo "bar";} 
function baz(){echo "baz";  return 2;} 
echo foo()||foo()?baz():baz(); // baz2

答案 1 :(得分:1)

就个人而言,我认为没有错。它相当普遍,所以大多数PHP程序员都会理解它,就像他们理解扩展版本一样,使它完全可以接受。

答案 2 :(得分:1)

最重要的部分是您编写易于阅读的代码。例如,使用foo()bar()这样的函数名称是完全没用的,所以很难说你要比较哪两个更好。

接下来,if示例也有一些相当大的缺陷:

  • if是一种语言结构,但您可以像函数一样使用它。
  • 您将垂直空间添加到if条件中。由于空间影响视觉焦点,这可能使事情变得难以阅读。

另一个建议是:

if (foo()) {

但是你想比较两者:代码总是在它的上下文中。可读代码使用它的上下文。你的两个建议都是有效的,关键是你可以从代码中读出含义:

   conditionMet() && gotForIt();

   if (conditionMet()) goForIt();

自己决定。只是不要从一行混合到另一行,所以在整个代码中保留一种风格。

答案 3 :(得分:1)

foo() && bar();是一个布尔表达式,所以如果你不把它放在一个布尔上下文(ifwhile等条件)中就错了。

代码必须告诉正在解决问题的“故事”,使用此快捷方式并不能说明问题。这是一个丑陋的黑客,它不优雅。

如果您认为它“整洁”,那么您尚未达到代码意味着的点,而不是代码。