-2

PHPの場合、どうすれば親を壊すことができますか?

このコードの例:

if(true){ // This is parent conditional
    if(true) { // This is child conditional
        break parent conditinal
    }
}

afterBreakDoMe();

上記のコードから。子の条件が真の場合に必要です。次に、親の条件付きを解除し(その条件から終了)、残りのコードを続行します(afterBreakDoMe())。

更新-実際のコード

    $errorMessage = '';
    if(isset($_POST) && count($_POST)) { // Detect some user input
        // validation
        $countryName = trim($_POST['countryName']);         
        if($countryName == ''){ // validation user input, if false. exit from parent if and continue show html input (refer to $Render->output())
            $errorMessage = 'Name must not be empty!'; 
        }

        header('Location: '.$baseUrl.'&page=tableShipping');
    }

    $Render->setTitle('Create New Country');
    $form = $Render->parser('createCountry', array(
        'errorMessage' => $errorMessage,
    ));
    $Render->addContent($form);

    $Render->output();
4

6 に答える 6

4

あなたはそれをすることはできません(gotoタブーであるを使用することを除いて)、そしてそれをするべきではありません。単純にするために機能を交換することは悪い考えです。

「実際の」コードに基づくと、プログラムフローは意味がありません。

if($countryName == ''){ // validation user input, if false. exit from parent if and continue show html input (refer to $Render->output())

それで、もしそうならtrue、あなたは設定し$errorMessage、そして終了し、ページを去り、そして二度とそれを使うことはないだろうか?なんで?エラーメッセージを忘れて、を呼び出してheader()から、を呼び出すこともできますexit;

私はあなたが起こりたいと思うことに基づいて次のコードを作成し、説明としてコメントしました:

$errorMessage = '';
if(isset($_POST) && count($_POST)) { // Detect some user input
    // validation
    $countryName = trim($_POST['countryName']);         
    if($countryName == ''){ // validation user input, if false. exit from parent if and continue show html input (refer to $Render->output())
        $errorMessage = 'Name must not be empty!'; 
    } else {
        // If there is no error, continue forward.
        header('Location: '.$baseUrl.'&page=tableShipping');
        exit; // Leave the page execution since you've applied a header.
    }
}

// This will only execute if there is an error, since we left the page otherwise.
$Render->setTitle('Create New Country');
$form = $Render->parser('createCountry', array(
    'errorMessage' => $errorMessage,
));
$Render->addContent($form);

$Render->output();

全体として、何をスキップするかではなく、次に何が起こるかを判断するために、プログラムのフローを考慮してください。

于 2012-12-15T20:03:14.633 に答える
1

単純

if (true) {
   if (true) {
       // Do stuff
       // It will then break automaticly
       // but if the condition here is false you got the else ;)
   } else {

   }
}
于 2012-12-15T19:37:44.410 に答える
1

gotoを使用します。これは、コードにジャンプするために使用されます

于 2012-12-15T19:42:54.950 に答える
1
$errorMessage = '';
do {
     if(isset($_POST) && count($_POST)) { // Detect some user input
        // validation
        $countryName = trim($_POST['countryName']);         
        if($countryName == ''){ // validation user input, if false. exit from parent if and continue show html input (refer to $Render->output())
            $errorMessage = 'Name must not be empty!';
            break;
        }

        header('Location: '.$baseUrl.'&page=tableShipping');
    }
while(false);// only for break
于 2012-12-15T19:48:19.027 に答える
1

実際のコードサンプルを読むことができるようになったので、あなたがする必要があるのは、すべての条件を1つにまとめるだけだと思います。を使用gotoすると作業は完了しますが、コードを読みにくく、保守しにくくする可能性があります。おそらく、プログラムの流れを再考する時が来たのでしょう。とにかく、私が言っていることはこのようなものです:

if(!empty($ _ POST)&& isset($ _ POST ['countryName'])&&(trim($ _ POST ['countryName'])=='')){
    $ errorMessage ='名前は空であってはなりません!';
}

..。
于 2012-12-15T19:50:39.957 に答える
1

変数と追加のifステートメントを使用できます。

$errorMessage = '';
$emptyCountry = false;
if(isset($_POST) && count($_POST)) { // Detect some user input
    // validation
    $emptyCountry = trim($_POST['countryName']) == '';
    if($emptyCountry){ // validation user input, if false.
        $errorMessage = 'Name must not be empty!'; 
    }

    header('Location: '.$baseUrl.'&page=tableShipping');
}
if (!emptyCountry) {
    $Render->setTitle('Create New Country');
    $form = $Render->parser('createCountry', array(
        'errorMessage' => $errorMessage,
    ));
    $Render->addContent($form);
}

$Render->output();
于 2012-12-15T20:37:08.063 に答える