Ho appena letto la pagina sulla Expressions nella documentazione di PHP, e proprio in cima si dice:Questo trattamento speciale di exit e die è documentato in PHP?
Il modo più semplice ancora più accurato per definire un'espressione è "tutto ciò che ha un valore".
Questa semplice definizione comprende tutte le funzioni e la maggior parte dei costrutti del linguaggio, tuttavia ci alcuni costrutti del linguaggio che esplicitamente dichiarano che non restituiscono un valore.
Ecco un elenco di costrutti di linguaggio che restituisce un valore:
Ecco l'interessante pochi che non restituiscono un valore, e quindi non sono espressioni:
trovo die
e exit
di particolare interesse, in quanto possono essere utilizzati come espressioni in PHP pur avendo alcun valore di ritorno. Le seguenti righe di codice tutti gettano un errore di sintassi, come previsto:
echo 'Hi' or echo 'Bye';
if(echo('foo'))
return return(1);
$foo['bar'] = isset($foo['bar']) ? unset($foo['bar']) : 0;
if(unset($foo['bar']))
__halt_compiler() or die;
Tuttavia il seguente codice PHP è completamente privo di errori di sintassi:
print 'Hi' or print 'Bye'; // Makes sense, print returns a value
if(!die() and exit) // Wait what's happening here?
quit(die(exit(quit()))); // die and exit don't have return values (does quit?)
$x = true ? die/2 : 5*exit();
$y = pow(die,7);
isset($_GET['bar']) or die(); // This one is actually pretty commonly used.
function quit(){
return exit;
}
Ho guardato attraverso i documenti PHP e può Trovo alcuna menzione di questo trattamento speciale di die() e exit(). Qualche esperto di PHP sa se questo è documentato ovunque. È questo comportamento previsto ed è lo schema isset($_GET['bar']) or die();
sicuro da utilizzare; potrebbe improvvisamente rompersi in una versione futura di PHP?
Non è solo una questione di semantica? È che 'die()'/'exit()' non ha un valore di ritorno * perché non restituiscono mai *? Non è che sono * sintatticamente * non espressioni, ma che in fase di runtime non vedrai mai il valore di ritorno perché il tuo programma non avrà mai la possibilità di usarlo. –
sicuro da usare? sì. questo idioma è disseminato in tutto il manuale negli esempi. Non potevano tirarci indietro. Inoltre, sulla lista interna, parlano sempre di quanti script in the wild verranno interrotti da una modifica prima di crearla, e questo si spezzerebbe ... immaginando 1/3 di tutti gli script php? lol – goat