1

这是有史以来创建的世界上最简单的 php if 语句,但我无法弄清楚如何做到这一点。基本上我有一个难过的时刻,需要社区的帮助。

这是我的功能:

protected function _traverse_options($name, $type = ''){

    if(isset($this->_options[$name][$type])){
        echo $this->_options[$name][$type];
    }
}

我需要的 if 语句是检查三件事:

  • 如果 type 不是 nulltype 不是 'before'
  • 如果类型不为空类型不是“之后”

我试着做:

if($type != '' && $type != 'before' || $type != '' && $type != 'after'){}

这怎么行不通。

我知道这很简单,但我想不通?应该||&&??

4

4 回答 4

0

所以任何非空字符串既不是before也不是after

if ('' !== $type && !in_array($type, array('before', 'after')))
{

}
于 2013-03-27T20:52:10.550 回答
0

这将完成这项工作:

if( $type != '' && $type != 'before' && $type != 'after'){}
于 2013-03-27T20:53:20.183 回答
0

如果我理解正确,您不需要 OR 在该声明上。尝试:

if (!is_null($type) && strlen($type) > 0 && $type !== 'before' && $type !== 'after') { ... }
于 2013-03-27T20:53:23.353 回答
0

使用括号,以便您可以看到什么属于什么。

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;
}
于 2013-03-27T21:13:55.160 回答