PHP 8.4.2 Released!

Uscita dal modo HTML

Tutto ciò che esiste fuori dai tag di apertura e chiusura è ignorato dall'analizzatore PHP, il che permette di avere contenuto misto nei file PHP. Questo permette a PHP di essere incluso nei documenti HTML, per esempio per creare modelli.

<p>Questo sarà ignorato dea PHP e verrà visualizzato nel browser.</p>
<?php echo 'Questo invece sarà interpretato.'; ?>
<p>Pure questo sarà ignorato dea PHP e verrà visualizzato nel browser.</p>
Questo codice si comporta come desiderato, perché quando l'interprete PHP incontra il tag di chiusura ?>, comincia semplicemente a visualizzare tutto ciò che trova (tranne che per la nuova riga immediatamente successiva - vedere l'istruzione di separazione) finché non incontra un altro tag di apertura, a meno che non si trovi in una istruzione condizionale, nel qual caso l'interprete determinerà il risultato della condizione prima di prendere una decisione su cosa ignorare. Vedere l'esempio seguente.

Utilizzo di strutture con condizioni

Example #1 Escape avanzato con le condizioni

<?php if ($expression == true): ?>
Questo sarà viualizzato se l'espressione $expression è vera.
<?php else: ?>
Altrimenti verrà visualizzata questa linea.
<?php endif; ?>
In questo esempio PHP ignorerà i blocchi di codice in cui la condizione non è verificata, anche se sono fuori dai tag di apertura/chiusura; PHP li ignora a seconda della condizione dal momento che l'interprete PHP scavalca i blocchi contenuti in una condizione non verificata.

Nella visualizzazione di grossi blocchi di testo uscire dalla modalità di parsing del codice PHP è generalmente più efficiente che inviare il tutto tramite echo o print.

Nota:

Se PHP è incorporato in XML o XHTML, devono essere utilizzati i normali tag PHP <?php ?> per rimanere conformi agli standard.

add a note

User Contributed Notes 3 notes

up
404
quickfur at quickfur dot ath dot cx
14 years ago
When the documentation says that the PHP parser ignores everything outside the <?php ... ?> tags, it means literally EVERYTHING. Including things you normally wouldn't consider "valid", such as the following:

<html><body>
<p<?php if ($highlight): ?> class="highlight"<?php endif;?>>This is a paragraph.</p>
</body></html>

Notice how the PHP code is embedded in the middle of an HTML opening tag. The PHP parser doesn't care that it's in the middle of an opening tag, and doesn't require that it be closed. It also doesn't care that after the closing ?> tag is the end of the HTML opening tag. So, if $highlight is true, then the output will be:

<html><body>
<p class="highlight">This is a paragraph.</p>
</body></html>

Otherwise, it will be:

<html><body>
<p>This is a paragraph.</p>
</body></html>

Using this method, you can have HTML tags with optional attributes, depending on some PHP condition. Extremely flexible and useful!
up
77
ravenswd at gmail dot com
15 years ago
One aspect of PHP that you need to be careful of, is that ?> will drop you out of PHP code and into HTML even if it appears inside a // comment. (This does not apply to /* */ comments.) This can lead to unexpected results. For example, take this line:

<?php
$file_contents
= '<?php die(); ?>' . "\n";
?>

If you try to remove it by turning it into a comment, you get this:

<?php
// $file_contents = '<?php die(); ?>' . "\n";
?>

Which results in ' . "\n"; (and whatever is in the lines following it) to be output to your HTML page.

The cure is to either comment it out using /* */ tags, or re-write the line as:

<?php
$file_contents
= '<' . '?php die(); ?' . '>' . "\n";
?>
up
27
sgurukrupa at gmail dot com
10 years ago
Although not specifically pointed out in the main text, escaping from HTML also applies to other control statements:

<?php for ($i = 0; $i < 5; ++$i): ?>
Hello, there!
<?php endfor; ?>

When the above code snippet is executed we get the following output:

Hello, there!
Hello, there!
Hello, there!
Hello, there!
To Top