Hướng dẫn dùng gotos trong PHP

Bài trước chúng ta đã tìm hiểu vòng lặp cuối cùng đó là vòng lặp foreach trong php, vậy thì trong bài này chúng ta sẽ tìm hiểu một số câu lệnh dừng chương trình vòng lặp và lệnh nhảy tới một vị trí nào đó trong file PHP.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Nội dung chúng ta gồm ó các phần như sau:

  • Câu lệnh Break
  • Câu lệnh Continue
  • Câu lệnh Goto
  • Câu lệnh Die & Exit

1. Câu lệnh break

Lệnh break thường được dùng để thoát khỏi vòng lặp cho dù vòng lặp vẫn chưa kết thúc.

Ví dụ:

Bài viết này được đăng tại [free tuts .net]

for [$i = 1; $i 

The above example will output:

Example #2 goto loop example

The above example will output:

Example #3 This will not work

The above example will output:

Fatal error: 'goto' into loop or switch statement is disallowed in
script on line 2

devbyjesus at example dot com

7 months ago

the problem of goto is that it is a good feature but in a large codebase it reduces the readability of the code . that's all . i try to not use it to think about the person who is going to read after me .

Lollo

1 year ago

You should mention the label can't be a variable

firstbitrix at ya dot ru

6 months ago

I found a good way to use goto for walking through a foreach iteration one another time in order not to walk through whole array once again or not to use special and mostly complex if...else constructions.

But don't forget to make an exit from the goto loop if the iteration of rewalking reaches to many attemptions.

Brief example:

foreach [$fooArray as $foo] {

        $attemptionLimit = 0;
    restartIteration:
    if [++$attemptionLimit > 10] {
        continue;
    }

        $result = $foo->doSomething[];
    if [!$result] {
        $foo->doSomethingElse[$attemptionLimit];
        goto restartIteration;
    } else {
        echo "Done!";
    }
}

PHP_is_still_great

1 year ago

// goto is STILL a good feature if you know how to use it.
// Just don't use it in loops.
// Example:

        $sql = "DELETE FROM sometable WHERE id=?;";
        $stmt = $conn->prepare[$sql];
        if [!$stmt] {
            echo "ERR prepare_fail";
            goto End;
        }
        $bind = $stmt->bind_param['i', $id];
        if [!$bind] {
            echo "ERR bind_fail";
            goto End;
        }
        $exec = $stmt->execute[];
        if [!$exec] {
            echo "ERR exec_fail";
            goto End;
        }
        if [isset[$_POST['file']]] {
            $file = "../" . $_POST['file'];
            if [is_file[$file]] { unlink[$file]; }
        }
        echo "OK delete_success" ;

        End:
        $stmt->close[];
        $conn->close[];
        exit;

/*
    instead of repeating the $stmt->close[] and $conn->close[],
    we save a few lines by adding a goto and just close everything at the end.
*/

instatiendaweb at gmail dot com

1 year ago

$array = array[];
for [$i = 0; $i

Chủ Đề