无法弄清楚如何创建这个if语句
问题描述:
这是世界上最简单的php if语句创建,我怎么永远无法弄清楚如何做到这一点,在一个。基本上我有一个难倒的时刻,并要求社区的帮助。无法弄清楚如何创建这个if语句
这是我的函数:
protected function _traverse_options($name, $type = ''){
if(isset($this->_options[$name][$type])){
echo $this->_options[$name][$type];
}
}
if语句我需要的是检查三两件事:
- 如果类型不为空但类型不是 '前'
- 如果类型不为空但类型不是'后'
我试着这样做:
if($type != '' && $type != 'before' || $type != '' && $type != 'after'){}
如何以往任何时候都不起作用。
我知道这很简单,但我无法弄清楚它?应该||
是&&
??
答
这将做的工作。 尝试:
if (!is_null($type) && strlen($type) > 0 && $type !== 'before' && $type !== 'after') { ... }
答
因此,任何非空字符串既不是before
也不是after
。如果我的理解是正确的,你不需要或者该声明
if($type != '' && $type != 'before' && $type != 'after'){}
答
:
if ('' !== $type && !in_array($type, array('before', 'after')))
{
}
答
使用括号,以便您可以看到什么属于什么。
if ($type != null && ($type !== 'before' && $type !== 'after')) {
// ...
}
如果你不小心,你可能有问题的,比如数学,其中计算可以给出两种不同的结果取决于何种操作,你先做结束。例如2*5-10
,它可以是0
或-10
,具体取决于您乘以或减去的顺序:(2*5)-10
或2*(5-10)
。
你也可以把它变得更轻松打破了逻辑到变量,使得跟随if
语句简单:
$notNull = ($type != null);
$notBeforeAndAfter = ($type !== 'before' && $type !== 'after');
if ($notNull && $notBeforeAndAfter) {
// ...
}
如果你确切地知道该$type
变量必须包含,那么你也可以使用一个switch
声明。这很容易理解:
switch ($type) {
case 'before':
echo '$type is "before"';
break;
case 'after':
echo '$type is "after"';
break;
// $type is not 'before' or 'after', which means that
// it is something else which we cannot use...
default:
echo '$type is an unknown value. Error maybe?';
break;
}
'&&'的优先级高于'||'吗? – Izkata 2013-03-27 20:54:53
此外,即使'null ==''',您应该使用'$ type === null'(或'!==') - 它更准确,更不可能导致奇怪的错误。例如,如果'$ type'确实是''''出于某种原因?或者[其他与“'''相同的内容](http://www.php.net/manual/en/types.comparisons.php)? – Izkata 2013-03-27 20:57:18