condizionali di PHP, staffe necessari?
-
22-08-2019 - |
Domanda
Mi stavo navigando un forum e qualcuno ha chiesto circa un file PHP che avevano trovato sul web. Ha diversi punti di questo tipo nel codice:
if ($REMOTE_ADDR == "") $ip = "no ip";
else $ip = getHostByAddr($REMOTE_ADDR);
Ho sempre pensato staffe sono necessari per racchiudere ciò che si vuole fare se la condizione è vera. C'è qualche altra alternativa, come ad esempio se è sulla stessa linea non lo fai?
C'è anche un'altra linea come questa:
if ($action != ""):
mail("$adminaddress","Visitor Comment from YOUR SITE",
Il mio istinto è quello di dire che questo non avrebbe funzionato, ma ho anche non so se si tratta di un file PHP obsoleto ed è abituato a lavorare?
Soluzione
si può fare se else come questo:
<?php
if ($something) {
echo 'one conditional line of code';
echo 'another conditional line of code';
}
if ($something) echo 'one conditional line of code';
if ($something)
echo 'one conditional line of code';
echo 'a NON-conditional line of code'; // this line gets executed regardless of the value of $something
?>
e quindi si può anche scrivere se - altro in una sintassi alternativa:
<?php
if ($something):
echo 'one conditional line of code';
echo 'another conditional line of code';
elseif ($somethingElse):
echo 'one conditional line of code';
echo 'another conditional line of code';
else:
echo 'one conditional line of code';
echo 'another conditional line of code';
endif;
?>
con la sintassi alternativa si può anche cadere dalla modalità di analisi in questo modo:
<?php
if ($something):
?>
one conditional line of code<br />
another conditional line of code
<?php
else:
echo "it's value was: $value<br />\n";
?>
another conditional line of code
<?php
endif;
?>
Ma questo diventa veramente disordinato veramente veloce e non vi consiglio il suo uso (tranne forse per il modello-logica).
e per renderla completa:
<?php
$result = $something ? 'something was true' : 'something was false';
echo $result;
?>
equals
<?php
if ($something) {
$result = 'something was true';
} else {
$result = 'something was false';
}
echo $result;
?>
Altri suggerimenti
Per andare in un po 'più in dettaglio, la ragione per cui le parentesi graffe sono opzionali è che la sintassi si presenta come:
if(CONDITION) BLOCK
[elseif(CONDITION) BLOCK]
[else BLOCK]
BLOCK può essere una singola istruzione:
foo();
oppure può essere un gruppo brace-recintato di dichiarazioni:
{
foo();
bar();
}
A mio parere
if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);
è valido, ma molto più difficile da leggere rispetto:
if ($REMOTE_ADDR == "") {
$ip = "no ip";
} else {
$ip = getHostByAddr($REMOTE_ADDR);
}
Bretelle (non tra parentesi) sono opzionali in PHP, come nella sintassi più C-like. Forse stai pensando di Perl; stanno tenuti lì, per quella forma di se la sintassi.
La cosa colon è una forma struttura di controllo alternativo che supporta PHP. L'odio, ma alcune persone (in particolare i progettisti di sistemi modello, a quanto pare) amo.
Sì, escludendo le parentesi graffe è consentita, anche se molte volte ho sentito 2 motivi per non usare questa sintassi:
- E 'più difficile da leggere. Meno ovvio per un altro programmatore.
- Se mai Wäny aggiungere qualcosa dentro il caso, allora è necessario aggiungere le parentesi graffe, che è più difficile dopo che l'allora quando si è prima codifica in quanto maggior parte degli editor aggiungerà la parentesi di chiusura per voi.
Inoltre, sì, la sintassi del colon è valido. Le alternative possono essere trovate qui: http://php.net/manual /en/control-structures.alternative-syntax.php
brackets are needed to enclose what you want to do if the condition is true
Non riesco a pensare di qualsiasi linguaggio che richiede questo