PHP-Kurzschreibweisen – Sinnvoll oder nicht?

Diesmal geht es um Kurzschreibweisen in PHP. Zunächst soll festhalten werden, welche es gibt, allerdings soll das nicht der Kern des Beitrags sein. Vielmehr möchte ich wissen, wie Entwickler dazu stehen.

Das If-Else-Konstrukt

if ( $condition )
    echo "true";
else
    echo "false;
// entspricht
if ($condition) {
    echo "true";
} else {
    echo "false";
}

oder:

$output = $condition ? "true" : "false";
// entspricht
if ($condition) {
    $output = "true";
} else {
    $output = "false";
}

For-/Foreach-/While-Schleife

for ($i=0; $i<10; $i++)
    $output .= $i;
// entspricht
for ($i=0; $i<10; $i++) {
    $output .= $i;
}

Kalkulation und Strings

$i += 1; // entspricht: $i = $i + 1;
$i *= 2; // entspricht: $i = $i * 2;
$string .= "i"; // entspricht: $string = $string . "i";

Soviel zu den Kurzformen, wobei es sicherlich noch mehr gibt, welche man als solche bezeichnen könnte. Jetzt jedoch zum eigentlichen Thema. Ich selbst verwende diese Schreibweisen nur sehr ungern, ausgenommen der Kalkulationen und bei Strings, da diese ziemlich durchgängig auch in anderen Programmiersprachen funktionieren und demnach sehr gängig sind. Die Restlichen verwende ich prinzipiell nie, da einerseits nicht jeder Entwickler damit vertraut ist und andererseits, gerade bei den If-Else- und Schleifenkonstrukten, sehr schnell Fehler entstehen können – beispielsweise wenn man nachträglich eine weitere Codezeile hinzufügt und vergisst die Klammern zu setzen. Sollte der Code außerdem nicht korrekt eingerückt sein, kann es ebenfalls zu Verständnisproblemen kommen, wenn ein anderer Entwickler den Code liest.

Nicht zuletzt halte ich es auch für sinnvoll einheitlich zu programmieren und dafür entsprechende Konventionen festzulegen (ergänzend soll hier nochmal auf den Beitrag “Richtig kommentieren in PHP” hingewiesen werden”). Dazu sollte dann eben auch die Verwendung solcher Kurzformen angesprochen werden, welche wie bereits erwähnt, nach meiner Ansicht, in Projekten mit mehreren Entwicklern nicht sinnvoll ist. Auch im Qualitätsmanagement kann es hier zu negativen Auswirkungen kommen, da diese Schreibweisen beispielsweise bei der Code-Überprüfung (mit dem PHP CodeSniffer u.Ä.) häufig als Fehler angesehen werden. In diesem Fall bliebe nur die Erarbeitung eigener Standards, was in diesem Fall nur bedingt empfehlenswert ist.

Getagged mit: , , ,
Veröffentlicht unter Entwicklung
12 Kommentar auf “PHP-Kurzschreibweisen – Sinnvoll oder nicht?
  1. Oliver sagt:

    Hihi, das find ich jetzt lustig, dass Du selbst Kurzformen nutzt, wo Du es angeblich ja nicht tust.

    for ($i=0; $i<10; $i++) {

    müsste doch eigentlich

    for ($i=0; $i<10; $i=$i+1) {

    sein, oder? 😛

    Ansonsten ja, nutze ich, aber nur dann, wenn ich die Stelle auf eine Zeile kürzen kann, also z. B.:

    while($i<10) $output .= $i;

    Ist nicht unbedingt der „Normalfall“, aber kann mal vorkommen. So etwas einfaches künstlich aufzublasen, halte ich persönlich für wenig sinnvoll.

  2. Ich selbst ertappe mich immer wieder bei Konstruktionen dieser Art:

    if ($foo)
    foo();
    else
    bar();

    Das Problem davon sehe ich allerdings hauptsächlich darin begründet, dass man so gut wie immer nachträglich noch was dazubasteln möchte und deswegen eben doch nachträglich noch die geschweifte Klammer setzen muss.

    Mit dem ternären Operator habe ich allerdings keim Problem, da er in den meisten Fällen simple Zusammenhänge prägnant beschreiben kann. Sowas z.B.:

    Für diesen Fall geht das schon klar.

    • PHP Tags wurden rausgefiltert. Nochmal zum ternären Operator:

      $i % 2 == 0 ? „even“ : „odd“

      Das stand da.

    • http://www./ sagt:

      August 24, 2012  8:48 pm It’s in point of fact a nice and helpful piece of information. I’m happy that you shared this useful information with us. Please keep us up to date like this. Thanks for sharing.

  3. camma sagt:

    Ich nutze Trinitäts-Operatoren sehr gerne um Variablen zu deklarieren

    $variable = isset($_GET[‚variable‘]) ? $_GET[‚variable‘] : ‚default value‘;

    Mit Einrückungen gut formatiert, hat man bei mehreren Variablen so eine gute Übersicht.

    if und else ohne {} nutzte ich relativ häufig. Allerdings komme ich auch wieder mehr davon weg. Beim Ausbau eines Scripts ist mir dies auch schon zum Verhängnis geworden.

    • Oliver sagt:

      ich bin immer so schreibfaul …

      function get($name,$defaultValue=null)
      {
      return isset($_GET[$name]) ? $_GET[$name] : $defaultValue;
      }

      $var1 = get(‘var1′);
      $var2 = get(‘var1′);
      $var3 = get(‘var1′);

      Geht natürlich auch für post und request.

  4. Tom Thaler sagt:

    @Oliver: Wie gesagt, die Kurzformen für Kalkulationen, also auch sowas wie $i++, benutze ich natürlich auch. Zu deinem Argument mit der While-Schleife: Man sollte hier vielleicht die Frage stellen, ob es sich wirklich um “künstliches aufblasen” oder bei deiner Variante um eine Abkürzung handelt.

    Zugegebenermaßen verwende ich ebenfalls ab und an mal die Trinitäts-Operatoren, da diese eindeutig sind und bei eventuellen Code-Anpassung nicht zu Problemen führen (man kann halt darin nicht einfach mal eine Zeile hinzufügen).

  5. Kettil sagt:

    Ich benutze die Abkürzung für Kalkulation und Strings, aber die restlichen vermeide ich, da ich es nicht eindeutig finde und es zu missverständen führen könnte, gerade wenn man nachträglich noch was hinzufügt.

    Gleichzeitig finde ich es anstrengen, wenn man sich fremden Code anschaut und for/if Abkürzung (am besten noch verschachtelt) benutzt…

  6. Norbert sagt:

    Also ich bin immer dafür die geschweiften Klammern zu setzen. So ist es mE einfacher auf einen Blick zu sehen was gemeint ist.

    Den ternären Operator benutze ich nur bei direkten Zuweisungen. Sobald eine Klausel mindestens aus einem Methodenaufruf besteht weiche ich auf die herkömmliche if-then-else Konstruktion aus. Das finde ich auch wieder besser lesbar. Verschachtelte ternäre Ausdrücke finde ich besonder schlimm – aber alles schon gesehen 😉

    Die Kalkulation und String-Abkürzungen finde ich okay. Man muss aber aufpassen, dass man nicht versehentlich ein . oder + vergißt.

    Und jetzt noch was nettes, was es seit php 5.3 gibt (ich habe das Beispiel von camma geschnappt):

    $variable = $_GET[‚variable‘] ?: ‚default value‘;

    Wer mag erzählen was der macht?

    • Z4ppy sagt:

      Das gleiche wie
      $variable = $_GET[„variable“] ? $_GET[„variable“] : ‘default value’;
      ^^

  7. stefket sagt:

    Also ich nutze die Trinitäts-Operatoren und auch die Kurzschreibweisen bei Kalkulation und Strings regelmäßig.

    Ansonsten setz ich immer brav die Klammern, da wie schon geschrieben sehr schnell mal ein Fehler passieren kann.