PHP-Bedingungen, Klammern benötigt?

Lesezeit: 4 Minuten

PHP Bedingungen Klammern benotigt
Levi

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?

1643917447 965 PHP Bedingungen Klammern benotigt
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:

if(CONDITION) BLOCK
[elseif(CONDITION) BLOCK]
[else BLOCK]

BLOCK kann eine einzelne Anweisung sein:

foo();

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

1643917447 682 PHP Bedingungen Klammern benotigt
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:

  1. Es ist schwerer zu lesen. Für einen anderen Programmierer weniger offensichtlich.
  2. 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.

Auch ja, die Doppelpunktsyntax ist gültig. Die Alternativen finden Sie hier: http://php.net/manual/en/control-structures.alternative-syntax.php

  • Die Antwort von @ Jacco enthält dieses Beispiel.

    – SQueryL

    20. Dezember 18 um 18:03 Uhr

PHP Bedingungen Klammern benotigt
Scott Evernden

brackets are needed to enclose what you want to do if the condition is true

Ich kann mir keine Sprache vorstellen, die dies erfordert

.

759400cookie-checkPHP-Bedingungen, Klammern benötigt?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy