4
$foo=1;

function someFunction(){
  if($foo==0){ //-------Will test, won't execute
    bar();
  }elseif($foo==1){ //--Will test, and execute
    baz();
  }elseif($foo==2){ //--Doesn't test
    qux();
  }elseif($foo==3){ //--Doesn't test
    quux();
  }else{ //-------------Doesn't test
    death();
  } //------------------The program will skip down to here.
}

baz()が$ fooの値を変更し、それが毎回異なるとしましょう。私のコードは、最初のステートメントの後にelseif / elseステートメントをテストし続け、それらがtrueの場合はそれらを実行するようにします。

関数全体を再度実行したくありません(つまり、$ foo = 0または1であるかどうかは関係ありません)。「続ける」のようなものを探しています。とにかく、これが可能かどうか私に知らせてください。ありがとう。:)

編集**私のコードは実際にはこれよりもはるかに複雑です。理論のためにコードを置いていたところです。私が欲しいのは、通常はテストしない場所でテストを続けるためのスクリプトです。

4

4 に答える 4

7

私が正しく理解している場合は、elseif前のif/ sが一致したかどうかに関係なく、連続して実行する必要がありますが、 / sが一致しないelseif場合はコードを実行する必要もあります。この場合、フラグの1つが一致した場合に設定するフラグを設定し、代わりにsを使用できます。ifelseif$matchedtrueif

<?php
$foo=1;
function someFunction(){
  $matched = false;
  if($foo==0){
    bar();
    $matched = true;
  }
  if($foo==1){ //--This elseif will get executed, and after it's executed,
    baz();
    $matched = true;
  }
  if($foo==2){
    qux();
    $matched = true;
  }
  if($foo==3){
    quux();
    $matched = true;
  }
  if(!$matched){ /* Only run if nothing matched */
    death();
  }
}

最後までスキップできるようにしたい場合は、次を使用しますgoto(ただし、最初にこれを参照してください)。

<?php
$foo=1;
function someFunction(){
  $matched = false;
  if($foo==0){
    bar();
    $matched = true;
    goto end: // Skip to end
  }
  if($foo==1){ //--This elseif will get executed, and after it's executed,
    baz();
    $matched = true;
  }
  if($foo==2){
    qux();
    $matched = true;
  }
  if($foo==3){
    quux();
    $matched = true;
  }
  if(!$matched){ /* Only run if nothing matched */
    death();
  }
  end:
}
于 2012-05-21T20:52:55.913 に答える
3

これが意味するのかどうかはわかりませんが、switchステートメントを使用できます。

$foo=1;
function someFunction(){
  switch($foo==0){
    case 0:
        bar();
    case 1:
        baz();
    case 2:
        qux();
    case 3:
        quux();
    default:
        death();
}

いずれの場合も、'は壊れていないことに注意してください。

于 2012-05-21T20:44:53.847 に答える
1

ifとifの束だけでelseを使用することはできません...

于 2012-05-21T20:42:34.813 に答える
-1

//この応答は正しくありません。以下のコメントを参照してください。ありがとう!

私は専門家ではありませんが、私が理解しているように、彼らは走り続けます。将来、elseif()ステートメントのグループを作成していて、1つが真のときにシリーズを終了したい場合は、breakコマンドを使用します。も参照してくださいswitch()

私が間違っていれば、私は絶対に訂正の余地があります。

于 2012-05-21T20:44:51.427 に答える