这是我最近的任务
特定变量有时会为空(除了一些连接到它的空格),在这种情况下我想回显“错误”消息
这是我的if语句:
if(preg_match("/^\s+$/",$var[$i])) {
echo "Description not available";
} else {
echo $var[$i];
}
我的问题是,既然错误是异常而不是常态,那么编写首先预测最常见情况的查询会更有效吗?
E.g:
if(!preg_match("/^\s+$/",$var[$i])) {
echo $var[$i];
} else {
echo "Description not available";
}
或许还有一种更好的方式可以写出会更有效率吗?
可以公平地说,差异是不明显的,但可能没有差别!我不知道PHP引擎如何通过这些语句工作
答案 0 :(得分:4)
没关系。这是用户的偏好。但我认为更多人喜欢在一开始就写出最常见的案例。无论如何,为什么你使用preg_match作为你的例子?
这是最简单的写作方式:
if(!empty($var[$i]) && !ctype_space($var[$i]) {
echo $var[$i];
} else {
echo "Description not available!";
}
就像你看到的那样 - 我正在使用Beginning中最常见的案例。
我编辑了我的答案以检查空格。无论如何,使用空格检查正则表达式可能是更干净的解决方案。
答案 1 :(得分:1)
实际上没有区别。一般来说,if()中的逻辑最容易理解(额外的!增加了人类的解析复杂性)。也就是说,如果if的主体结尾相对较大而其他地方的代码很少,例如对于错误,您可能更愿意反转逻辑并将错误放在第一位,这样乍一看,错误和大多数逻辑都可以一起看。
答案 2 :(得分:1)
如果你有嵌套的if
语句,你可以组织它们来测试最常见的结果,以加快速度。
如果您有更复杂的语句,其中包含AND
和/或OR
s,您可以将语句排列为“更快失败”。 F.E.使用AND
并将最可能的选项放在首位将允许程序更频繁地跳过第二个测试。
您给出的示例不会执行其中任何一项。因此,虽然可以通过重新排序IF
语句来加快速度,但在您的具体示例中是不可能的(除非您遵循@Xatenev给出的想法)。
答案 3 :(得分:0)
几年前我做了一些基准测试(在PHP 5.x上)并且我无法清楚地说明是否使用否定操作符进行时间或空间优化。
这完全取决于您的可读性,为此,我的观点是首先从错误案例开始的函数/方法。目的是将嵌套级别减少到我的函数中。
示例:而不是
function foo()
{
if ($a === 1) {
if ($b === 2) {
if ($c === 3) {
return doD();
} else {
return doC();
}
} else {
return doB();
}
} else {
return doA();
}
}
你可以做到
function foo()
{
if ($a !== 1) {
return doA();
}
if ($b !== 2) {
return doB();
}
if ($c !== 3) {
return doC();
}
return doD();
}
只需切换布尔条件,即可了解如何减少嵌套级别。
但当然,这只是个人使用和偏好,这里没有规则也没有优化。
答案 4 :(得分:0)
我想这是更好更快的
if ( ! empty( trim($var[$i]) ) ){
echo "Description available!";
}
else{
echo "Description not available!";
}