-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

现在我可以阅读真正的代码示例,我认为您需要做的就是将所有条件放在一个单一的。使用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 回答