Ci sono molti "Perché PHP lancia un errore qui?" domande. Bene, questo è un po 'diverso. Ho trovato il seguente codice, mentre la rielaborazione del codice scritto da un collega:perché PHP non genera un errore di analisi?
foreach($arr as $key => $value) {http://google.com/
echo $value;
// ...
}
Il mio primo pensiero: "Umm ... come imbarazzante, deve aver accidentalmente incollato che là dentro ..." seguito da: "Aspetta ... non è possibile che questo codice venga effettivamente eseguito ... dovrebbe essere un errore di sintassi ". E tuttavia:
$ php -l test.php
No syntax errors detected
E infatti, (come tanto di codice PHP che apparentemente non dovrebbero funzionare) viene eseguito in produzione senza difficoltà. Così ho fatto un po 'di test:
foreach($arr as $key => $value) {http://google.com/ <-- original, no error
foreach($arr as $key => $value) {http: <-- also no syntax error
foreach($arr as $key => $value) {http <-- bingo! "Unexpected T_ECHO..."
Quale piccolo bocconcino della grammatica di PHP sta producendo risultati così strani?
(sto usando PHP 5.3.5)
'http:' è un'etichetta e '//' è un commento. Ho visto questo trucco prima. – Borealid
Naturalmente. Non avevo idea che PHP avesse 'goto'. Difficile. – chesles
Ugh. Un altro elemento sul "perché * l'inferno * ha fatto questa triste funzionalità deve essere implementato in una lingua che è già guidata da caratteristiche stupide?" elenco. –