PHP GOTO komutu?

6 Cevap php

Ben PHP "goto" komutu tanıtan planlıyor söylentiler duydum. Ne yapıyor olması gerekiyordu?

Biraz arama denedim, ama çok açıklayıcı bir şey bulamadı. Ben bir "GOTO 10" gibi komut olmayacağını anlıyorum ...

6 Cevap

Onlar gerçek bir GOTO ekleyerek, ama statik etiket kullanmak için BREAK anahtar uzanan değildir. Temelde, patlak yeteneğini arttırmak olacaktır switch ifadeleri ise iç içe. Burada bulunan konsept örnek:

<?php
for ($i = 0; $i < 9; $i++)
{
        if (true) {
                break blah;
        }
        echo "not shown";
blah:
        echo "iteration $i\n";
}
?>

GOTO "söylenti" üzerinden bir kez Tabii ki, ek COMEFROM şaka yaymak için bazı kötü adamlar durdurmak için hiçbir şey yoktu. Uyanık olun.

Ayrıca bkz:

http://www.php.net/~derick/meeting-notes.html#adding-goto

Verilen, ben bir PHP programcısı değilim, ve ben GOTO PHP'nin tam bir uygulaması gibi görüneceğini bilmiyorum, ama burada GOTO benim anlayış:

GOTO diğerleri gibi sadece daha açık bir akış kontrol ifadedir. Diyelim ki bazı iç içe döngüler var ve sadece tek bir şey bulmak gerekiyor diyelim. Bir koşullu deyim (veya birkaç) koyabilirsiniz ve koşullar düzgün sağlandığında, bunun yerine bir koşullu deyimi ile her yuvalanma düzeyinde bir 'mola' deyimi sahip (tüm döngüler çıkmak için bir GOTO deyimi kullanabilirsiniz her Ve evet, ben geleneksel uygulama GOTO deyimi adıyla atlayabilirsiniz etiketleri adında var olduğuna inanıyorum Sen böyle bir şey yapabilirsiniz..:

for(...) {
    for (...) {
        for (...) {
        // some code
        if (x) GOTO outside;
        }
    }
} 
:outside

Bu GOTO ifadeleri olmadan daha basit (ve daha verimli) uygulamasıdır. Eşdeğer olacaktır:

for(...) {
    for (...) {
        for (...) {
            // some code
            if (x) break;
        }
        if(x) break;
    }
    if(x) break;
}

(Yaygın bir uygulama) ikinci durumda tabii ki sadece bir tane olan daha yavaştır üç koşullu ifadeler vardır. Yani, optimizasyon / Sadeleştirilmesi nedenlerle, sıkıca iç içe döngüler GOTO ifadeleri kullanmak isteyebilirsiniz.

Bu looks PHP 5.3 şu anda, ama gibi henüz tam olarak belgelenmiş değildir. Ben C ile Goto sözdizimi paylaşıyor, bu yüzden pick up ve kullanımı kolay olmalıdır ne söyleyebilirim. Sadece hatırlıyorum Dijkstra'nın warning ve sadece gerektiğinde kullanın.

@ Steveth45

My rule of thumb is that if you have nested code more than 3 levels deep, you are doing something wrong.

D: O zaman çoklu kırılma ifadeleri veya goto ifadesi kullanarak endişelenmenize gerek yok

Tarafından verilen örnekte steveth45 yerine bir işlevi kullanabilirsiniz:

function findItem(...) {
  for (...) {
    for (...) {
      for (...) {
        if (x) {
          return theItem;
        }
      }
    }
  }
}

// no need for label now
theItem = findItem(a, b, c);

> http://php.net/manual/en/control-structures.goto.php, ama ben sadece normal kod yazmak, kullanmak olmaz ... - Orada bir goto php olduğunu