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:)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top