用PHP中的逻辑表达式替换IF

前端之家收集整理的这篇文章主要介绍了用PHP中的逻辑表达式替换IF前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我偶然发现一个与此类似的构造时,我正在重构一些旧代码: @H_403_1@// function bar() returns a value // if the value is an instance of customException class,terminate with error code // else process the regular data $foo = bar(); checkForException($foo) && exit($foo->errorCode()); process($foo);

虽然它看起来很奇怪,但是它要短得多

@H_403_1@$foo=bar(); if(checkForException($foo)) { exit($foo->errorCode(); } else { process($foo); }

而且更具可读性(至少在最初的惊喜之后)

@H_403_1@$foo=bar(); (checkForException($foo)) ? exit($foo->errorCode()) : process($foo);

虽然较短的代码并不一定意味着更易读的代码,但我发现这是在上面两种“标准”方式的中间.

换句话说,而不是

@H_403_1@if($foo) { bar(); } else { // there is no real reason for this to exist,since // I have nothing to write here,but I want to conform // to the general coding practices and my coding OCD }

人们可以简单地写

@H_403_1@$foo && bar();

那么这个没有多大用处的原因是什么?它可以简单到“不要重新发明轮子,写下更可读的if / else,如果你真的想缩短它,这就是三元运算符的用途”?

编辑:请记住,上面的代码很快来自原始代码,并且只是一个使用“短路”代码的例子.如果可以,请限制建议代码改进,因为这不是问题的理想结果.

例2

@H_403_1@userCheckedTheBox($user) && displayAppropriateInfo();
我相信有一种古老的技术在黑客攻击的perl脚本中流行以显示错误.伪代码: @H_403_1@myFunction( ) || exitWithError( "Uh-oh" )

当编码到截止日期,并且当用户界面不需要是恒星时,这是避免错误快速方法.

该样式在javascript中也很受欢迎,用于默认参数:

@H_403_1@function myfunction(foo) { foo = foo || 0; // note that a non-zero default won't work so well,// because the user could call the function with 0 }

并且用于空检查:

@H_403_1@var bar = foo && foo.property;

我发现,一旦你习惯了它,它的可读性往往比if / else或?更直观.但是你应该只在有意义的时候使用它.在任何地方使用它都会变得非常混乱.例如,在您的示例中,您不应该使用它.我个人用它来进行简单的错误检查和一些默认值.在大型项目中,当发生错误时,您几乎总是希望做更多事情,因此在这些情况下您不应该使用它.

你也应该小心;这仅适用于具有短路评估的语言(http://en.wikipedia.org/wiki/Short-circuit_evaluation).有时候和/或是短路,而&&和||不是.

myfunction()或死(“我在融化!”);写作也很令人满意.

最后,空的其他块通常是我以前从未见过的,或听到有人推荐的.这对我来说似乎毫无意义.对于您的示例,最可读的选项很简单:

@H_403_1@if( $foo ) { bar( ); }
原文链接:https://www.f2er.com/php/137917.html

猜你在找的PHP相关文章