Ich habe gerade in einem Forum gestöbert und jemand fragte nach einer PHP-Datei, die er im Internet gefunden hatte. Es hat mehrere Stellen wie diese im Code:
if ($REMOTE_ADDR == "") $ip = "no ip";
else $ip = getHostByAddr($REMOTE_ADDR);
Ich habe immer gedacht, dass Klammern benötigt werden, um einzuschließen, was Sie tun möchten, wenn die Bedingung wahr ist. Gibt es eine andere Alternative, z. B. wenn es sich um dieselbe Zeile handelt, die Sie nicht haben?
Es gibt auch eine andere Zeile wie diese: if ($action != ""):
mail("$adminaddress","Visitor Comment from YOUR SITE",
Mein Instinkt ist zu sagen, dass dies nicht funktionieren würde, aber ich weiß auch nicht, ob es sich um eine veraltete PHP-Datei handelt und sie früher funktioniert hat?
Jacco
Sie können if else-Anweisungen wie diese tun:
<?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
?>
und dann können Sie auch if – else in einer alternativen Syntax schreiben:
<?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;
?>
Mit der alternativen Syntax können Sie den Parsing-Modus auch wie folgt verlassen:
<?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;
?>
Aber das wird sehr schnell sehr chaotisch und ich werde seine Verwendung nicht empfehlen (außer vielleicht für Template-Logik).
und um es komplett zu machen:
<?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;
?>
Wow, ich wusste nicht, dass es so viele Möglichkeiten gibt, PHP-Code zu strukturieren. Danke!
– Levi
19. Dezember 2008 um 15:37 Uhr
Im letzten Beispiel brauchen Sie die zusätzliche Variable nicht: echo $something ? ‘etwas war wahr’ : ‘etwas war falsch’;
– Darryl Hein
19. Dez. 08 um 15:40 Uhr
Ich weiß, dass es funktioniert, aber ich glaube, ich habe irgendwo gelesen, dass es sich um ein nicht dokumentiertes Ergebnis handelt (und sich daher in zukünftigen Versionen ändern könnte). Nicht sicher.
– Jaco
19. Dezember 2008 um 15:46 Uhr
Könnten Sie auch elseif für eine einzelne Zeile eines solchen Bedingungscodes verwenden? if ($something) $result = ‘etwas war wahr’; elseif ($something_else) $result = ‘etwas anderes war wahr’; sonst $result = ‘nichts ist wahr’;
– Adal
23. Februar 15 um 0:16 Uhr
Kann “elseif” die if-Bedingung tatsächlich leer lassen? (dh funktioniert “elseif:”?)
– AkiEru
23. Februar 15 um 8:48 Uhr
Um etwas mehr ins Detail zu gehen, der Grund dafür, dass die geschweiften Klammern optional sind, ist, dass die Syntax so aussieht:
oder es kann eine in geschweiften Klammern eingeschlossene Gruppe von Anweisungen sein:
{
foo();
bar();
}
Klammern (nicht Klammern) sind in PHP optional, wie in den meisten C-ähnlichen Syntaxen. Vielleicht denken Sie an Perl; Sie sind dort für diese Form der if-Syntax erforderlich.
Der Doppelpunkt ist eine alternative Kontrollstrukturform, die PHP unterstützt. Ich hasse es, aber einige Leute (besonders Designer von Template-Systemen anscheinend) lieben es.
Danke, es muss gewesen sein, dass ich zuerst Perl gelernt habe und es muss die strengere Seite von mir gewesen sein, die dachte, es sei falsch.
– Levi
19. Dezember 2008 um 15:36 Uhr
Meiner Meinung nach
if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);
ist gültig, aber viel schwerer zu lesen als:
if ($REMOTE_ADDR == "") {
$ip = "no ip";
} else {
$ip = getHostByAddr($REMOTE_ADDR);
}
9 Jahre später und ich bin überrascht, dass niemand das erwähnt hat ternärer Operator:
$ip = ($REMOTE_ADDR == "") ? "no ip" : getHostByAddr($REMOTE_ADDR);
Viel klarer für die Zuweisung IMHO – weil es mit der zugewiesenen Variablen herauskommt, wie bei der üblichen Variablenzuweisung.
Die Antwort von @ Jacco enthält dieses Beispiel.
– SQueryL
20. Dezember 18 um 18:03 Uhr
Darryl Hein
Ja, das Ausschließen der geschweiften Klammern ist erlaubt, obwohl ich oft zwei Gründe dafür gehört habe, diese Syntax nicht zu verwenden:
Es ist schwerer zu lesen. Für einen anderen Programmierer weniger offensichtlich.
Wenn Sie jemals etwas in das if einfügen möchten, müssen Sie die geschweiften Klammern hinzufügen, was danach schwieriger ist, wenn Sie zum ersten Mal programmieren, da die meisten Editoren die schließende geschweifte Klammer für Sie hinzufügen.