这是我最近的任务
一个特定的变量有时会是空的(除了一些连接到其中的空格),在这种情况下,我想要回显一个"error"消息
下面是我的if语句:if(preg_match("/^'s+$/",$var[$i])) {
echo "Description not available";
} else {
echo $var[$i];
}
我的问题是,由于错误是异常而不是规范,首先编写预测最常见情况的查询是否更有效?
例如:
if(!preg_match("/^'s+$/",$var[$i])) {
echo $var[$i];
} else {
echo "Description not available";
}
或者也许有更好的方式来写将更有效?公平地说,差异是/是不明显的,但可能根本没有区别!我不知道PHP引擎如何处理这些语句
没关系。这是用户偏好。但我认为更多人喜欢把最常见的情况写在开头。无论如何,为什么要在示例中使用preg_match ?
这是最简单的写法:
if(!empty($var[$i]) && !ctype_space($var[$i]) {
echo $var[$i];
} else {
echo "Description not available!";
}
就像你看到的,我在开头使用了最常见的情况。
我已经编辑了我的答案来检查空格。无论如何,使用空格检查,正则表达式可能是更干净的解决方案。
实际上没有区别。一般来说,if()中的逻辑是最容易理解的(额外的!)增加了人工解析的复杂性)。也就是说,如果if的主体最终相对较大,而else中的代码数量较少,例如对于错误,您可能更喜欢反转逻辑并将错误放在前面,以便第一眼看到错误和大部分逻辑都可以一起看到。
如果您有嵌套的if
语句,您可以组织它们,首先测试最常见的结果,以加快速度。
如果你有更复杂的语句包含AND
s和/或OR
s,你可以安排语句"失败更快"。例如,使用AND
并首先将最有可能的选项设置为false将允许程序更频繁地跳过第二次测试。
你给出的例子没有做这些。因此,虽然有可能通过重新排序IF
语句来加快速度,但在您的特定示例中是不可能的(除非您遵循@Xatenev给出的想法)。
几年前我做了一些基准测试(在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();
}
查看如何通过切换布尔条件来简化嵌套级别。
当然,这只是个人使用和偏好,这里没有规则,也没有优化。
我想这样更好更快
if ( ! empty( trim($var[$i]) ) ){
echo "Description available!";
}
else{
echo "Description not available!";
}