Pow*_*ser -2 php variables if-statement
所以我有这个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
}
?>
Run Code Online (Sandbox Code Playgroud)
但它似乎只使用($path = './images/';).出了什么问题?
if ("$page_id" !== '2' || "$page_id" !== '8')
Run Code Online (Sandbox Code Playgroud)
有些东西总是不等于"2"或"8",所以我希望你的意思是:
if ("$page_id" !== '2' && "$page_id" !== '8')
Run Code Online (Sandbox Code Playgroud)
或者,为了使其更清晰(else至少更符合条件):
if (! ("$page_id" == '2' || "$page_id" == '8') )
Run Code Online (Sandbox Code Playgroud)
注意,这==不是严格的,!==而是.适当的对应方是===,所以如果你更喜欢严格的比较,整个陈述将成为:
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
}
Run Code Online (Sandbox Code Playgroud)
但实际上,最后的其他人说"为了其他一切",尽管由于第一个条件中的不平等(!),第一个感觉就像其他一切一样.所以最好重写如下(路径交换):
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
}
Run Code Online (Sandbox Code Playgroud)
这也解决了一个错误,因为正如Nitigya Kuchhal在评论中正确提到的那样,第二个分支永远不会被执行,因为例如5也将不是2或8,所以在这种情况下它将 - 不正确地 - 输入第一个分支如果.
最后,有些人可能会发现一个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;
}
Run Code Online (Sandbox Code Playgroud)