phpBuddy

Folge phpBuddy.eu auf Twitter

Ab sofort können alle Twitter-Begeisterte sich auch über die Aktivitäten von phpBuddy.eu auf Twitter informieren. Ich werde dort in unregelmäßigen Abständen über neue Artikel, Tutorials, Kurztipps, lesenswerte Forumeinträge oder schlicht interessante PHP Funktionen informieren.

Sie sind hier: Startseite Quick Tip Index Kurzschreibweisen und alternative Syntax
Kurzschreibweisen und alternative Syntax

Kurzschreibweisen und alternative Syntax

Fortgeschrittene PHP Programmierer verwenden häufiger mal Kurzschreibweisen und alternative Schreibweisen in ihren Scripts. Dies spart in bestimmten Situationen etwas Tipparbeit und/oder gestaltet den Code übersichtlicher, wodurch der Code einfacher zu lesen und zu verstehen ist. Genau diese Kurz-/Alternativschreibweisen bereiten Einsteigern häufig Probleme. Die mit Abstand, auf den ersten Blick, am verwirrendste Kurzschreibweise ist der …


Ternary Operator / Trinitäts-Operator

Früher oder später stolpert jeder angehende Programmierer über dieses Konstrukt, hier mal ein Beispiel:

$zahl = 4;
$zustand = ($zahl > 3) ? 'größer' : 'kleiner';

Auf den ersten Blick sieht das recht kompliziert aus, ist im Grunde aber nichts anderes, als eine Kurzschreibweise für eine if/else-Abfrage. Ausgeschrieben würde das so aussehen:

if ($zahl > 3)
{
    $zustand = 'größer';
}
else
{
    $zustand = 'kleiner';
}

Somit kann man den Ternary Operator folgendermaßen interpretieren:

(Bedingung) ? BedingungIstWahrTuDies : BedingungIstNichtWahrTuDas

In meinen Anfängerzeiten hatte ich damit auch Probleme, konnte mir das aber gut merken, indem ich die Symbole des Ausdrucks auf die if-Abfrage übertragen haben. Das Fragezeichen im Ausdruck steht für das if, der Doppelpunkt steht für else. Daraus ergibt sich: if Bedingung links vom Fragezeichen ist TRUE, liefere den Rückgabewert rechts vom Fragezeichen. Ist die Bedingung FALSE, liefere den Rückgabewert rechts vom Doppelpunkt.

Wie zu sehen ist spreche ich hier von einem Rückgabewert und das auch mit gutem Grund. Denn das ist es, was den Ternary Operator von einer echten if-Abfrage unterscheidet. Es muss ein Wert zurückgegeben werden, sonst kommt es zu einem Parse Error. Man kann also keine Kontrollstrukturen wie Schleifen oder Sprachkonstrukte wie echo, die, exit, usw. angeben. Das würde zu einem Fehler führen:

$status = (1 < 2) ? echo 'ja' : echo 'nein';

Echo gibt Text an den Browser aus, liefert aber keinen Wert zurück, ob dies erfolgreich war. Dagegen würde die Ausgabe mit print fehlerfrei funktionieren da print eine PHP Funktion ist, im Gegensatz zum Sprachkonstrukt echo, und TRUE oder FALSE zurück liefert.

$status = (1 < 2) ? print( 'ja' ) : print( 'nein' );


Alternative Syntax für Kontrollstrukturen

Jeder kennt die normale Schreibweise für eine z.B. foreach-Schleife. Der auszuführende Codeblock innerhalb der Schleife wird in geschweiften Klammern platziert. In einfachen PHP Scripts ist das auch die beste Art der Darstellung, aber etwa in Templates, in denen HTML und PHP vermischt wird, kann es da schon mal unübersichtlich werden, wenn irgendwo zwischendrin auf einmal eine schließende geschweifte Klammer steht, die eine Schleifenausgabe beendet. Übersichtlicher wird der Code, wenn man hier auf die alternative Schreibweise zurückgreift.
Nehmen wir als Beispiel mal ein einfaches Array, dessen Existenz wir abfragen und dann mit den verschiedenen Schleifen ausgeben möchten.

$namen = array
(
    'Peter',
    'Susanne',
    'Michael',
);

if-Abfrage

// if/else
if (is_array( $namen )) :
    echo '$namen ist ein Array. <br />';
else :
    echo '$namen ist kein Array. <br />';
endif;

for-Schleife

// for
for ($i = 0; $i < count( $namen ); $i++) :
    echo $namen[$i] . "<br />";
endfor;

foreach-Schleife

// foreach
foreach ($namen as $name) :
    echo $name . "<br />";
endforeach;

while-Schleife

// while
$array = new ArrayIterator( $namen );
while ($array->valid()) :
    echo $array->current() . "<br />";
    $array->next();
endwhile;

Wie wir sehen, ist die Schreibweise bei diesen Varianten immer identisch. Statt einer öffnenden geschweiften Klammer wird hier ein Doppelpunkt geschrieben. Statt der schließenden geschweiften Klammer, wird hier ein end gefolgt von der Kontrollstruktur verwendet. Für eine for-Schleife endfor, für eine foreach-Schleife endforeach, für eine while-Schleife endwhile, usw.

Wie erwähnt, macht die alternative Syntax am meisten Sinn in Scripts mit gemischten Sprachen, wie etwa Templates.

Bis zum nächsten Quick Tip,
phpBuddy


Eine live Demo und den vollständigen Code findest Du auf der phpBuddy.eu Demo Seite.