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?

È stato utile?

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);
}

9 anni e mi sorprende nessuno del citato l'operatore ternario :

$ip = ($REMOTE_ADDR == "") ? "no ip" : getHostByAddr($REMOTE_ADDR);

molto più chiara per l'assegnazione IMHO -. Perché porta fuori con la variabile viene assegnato, come di consueto per l'assegnazione variabili

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:

  1. E 'più difficile da leggere. Meno ovvio per un altro programmatore.
  2. 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

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