sintassi strana PHP
-
04-10-2019 - |
Domanda
Ho lavorato su PHP
per qualche tempo, ma oggi quando ho visto questo è venuto come nuovo per me:
if(preg_match('/foo.*bar/','foo is a bar')):
echo 'success ';
echo 'foo comes before bar';
endif;
Con mia grande sorpresa funziona anche senza errori. Qualcuno può illuminarmi?
Grazie a tutti:)
Soluzione
Quello stile di sintassi è più comunemente usato quando incorporare in HTML, in particolare per la logica del modello / display. Quando incorporato in questo modo, è un po 'più facile da leggere rispetto alla sintassi parentesi graffe.
<div>
<? if ($condition): ?>
<ul>
<? foreach($foo as $bar): ?>
<li><?= $bar ?></li>
<? endforeach ?>
</ul>
<? endif ?>
</div>
Versus:
<div>
<? if ($condition) { ?>
<ul>
<? foreach($foo as $bar) { ?>
<li><?= $bar ?></li>
<? } ?>
</ul>
<? } ?>
Il verbose tag di chiusura rendono un po 'più facile per tenere traccia dei blocchi di codice nidificati, anche se è ancora in gran parte la preferenza personale.
Altri suggerimenti
Questa è Sintassi alternativa di PHP per le strutture di controllo .
Il frammento è equivalente a:
if(preg_match('/foo.*bar/','foo is a bar')) {
echo 'success ';
echo 'foo comes before bar';
}
In generale:
if(cond):
...
...
endif;
è uguale a
if(cond) {
...
...
}
http://php.net/manual/en/control -structures.alternative-syntax.php
Opere per if
, for
, while
, foreach
e switch
. Può essere molto utile per la miscelazione PHP e HTML.
Si può leggere su di esso in Sintassi alternativa per le strutture di controllo nel manuale di PHP. Riformattato, il codice che ha postato aspetto:
if (preg_match('/foo.*bar/','foo is a bar')):
echo 'success ';
echo 'foo comes before bar';
endif;
Questo codice è equivalente a:
if (preg_match('/foo.*bar/','foo is a bar')) {
echo 'success ';
echo 'foo comes before bar';
}
Questa sintassi è disponibile per diverse altre strutture di controllo pure.
if ( condition ):
// your if code
elseif ( other_condition ):
// optional elseif code
else:
// optional else code
endif;
while ( condition ):
// your while code
endwhile;
for ( condition ):
// your for code
endfor;
foreach ( condition ):
// your foreach code
endforeach;
switch ( condition ):
// your switch code
endswitch;
E 'l'equivalente di:
if(preg_match('/foo.*bar/','foo is a bar')):
echo 'success ';
echo 'foo comes before bar';
endif;
che è equivalente a:
if(preg_match('/foo.*bar/','foo is a bar')){
echo 'success ';
echo 'foo comes before bar';
}
La saggezza di sostenere sintassi condizionale non standard è ovviamente discutibile.