1

これは、これまでに作成された世界で最も簡単な php if ステートメントです。基本的に、私は困惑していて、コミュニティの助けが必要です。

これは私の機能です:

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

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

必要な if ステートメントは、次の 3 つのことを確認することです。

  • タイプが nullではなく、タイプが 'before' でない場合
  • タイプが nullではなく、タイプが「after」でない場合

私はやってみました:

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 つの異なる結果をもたらす可能性がある数学などの問題が発生する可能性があります。たとえば、乗算または減算の順序に応じて、またはの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 に答える