无法弄清楚如何创建这个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'){} 

如何以往任何时候都不起作用。

我知道这很简单,但我无法弄清楚它?应该||&& ??

+0

'&&'的优先级高于'||'吗? – Izkata 2013-03-27 20:54:53

+1

此外,即使'null ==''',您应该使用'$ type === null'(或'!==') - 它更准确,更不可能导致奇怪的错误。例如,如果'$ type'确实是''''出于某种原因?或者[其他与“'''相同的内容](http://www.php.net/manual/en/types.comparisons.php)? – Izkata 2013-03-27 20:57:18

这将做的工作。 尝试:

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)-102*(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; 
}