所以我有这个PHP代码块:
<?php
if ("$page_id" !== '2' || "$page_id" !== '8'){
$path = './images/'; // Only if $page_id !== '2 || 8'
} else if ("$page_id" == '5' || "$page_id" == '6' || "$page_id" == '7') {
$path = '../images/'; // Only if $page_id == '5-7'
} else {
$path = '/images/'; // For everything else
}
?>
但似乎只使用($path = './images/';
)。出了什么问题?
答案 0 :(得分:7)
if ("$page_id" !== '2' || "$page_id" !== '8')
总有一些东西总是不等于&#39; 2&#39;或者&#39; 8&#39;,所以我希望你的意思是:
if ("$page_id" !== '2' && "$page_id" !== '8')
或者,为了使其更清晰(至少更符合else
条件):
if (! ("$page_id" == '2' || "$page_id" == '8') )
注意,==
并不严格,!==
是。{1}}。正确的对应方是===
,所以如果你更喜欢严格的比较,那么整个陈述就会变成:
if (!("$page_id" === '2' || "$page_id" === '8')){
$path = './images/'; // Only if $page_id !== '2 || 8'
} else if ("$page_id" === '5' || "$page_id" === '6' || "$page_id" === '7') {
$path = '../images/'; // Only if $page_id == '5-7'
} else {
$path = '/images/'; // For everything else
}
但实际上,最后的其他人说&#39;对于其他一切&#39; ,虽然因为第一个条件(!
)的不平等,第一个感觉就像一切其他。所以最好重写如下(路径交换):
if ("$page_id" === '2' || "$page_id" === '8'){
$path = '/images/'; // Only if $page_id === '2 || 8'
} else if ("$page_id" === '5' || "$page_id" === '6' || "$page_id" === '7') {
$path = '../images/'; // Only if $page_id == '5-7'
} else {
$path = './images/'; // For everything else
}
这也解决了一个错误,因为正如Nitigya Kuchhal在评论中正确提到的那样,第二个分支永远不会被执行,因为例如5也不会是2或8,所以在这种情况下它会输入-inorrectly- if的第一个分支。
最后,有些人可能会发现switch
语句比if else树更易读。它使用更多行,但正如您所看到的,您可以更轻松地阅读它,它几乎是自我记录的。但是,Switch并不严格,但我认为在这种情况下,这不会成为一个问题。
另请注意,原始代码中存在的错误(您永远不会得到5,6或7)是固定的,现在实际上没有办法做错,除非您忘记了break
: )。
switch ($page_id)
{
case '2':
case '8':
$path = '/images/';
break;
case '5':
case '6':
case '7':
$path = '../images/';
break;
default:
$path = './images/';
break;
}