Paul: viele if-else vs. viel Schreibarbeit

Moin.
Was spricht für/gegen die beiden Varianten?

Erste Version (viel Schreibarbeit aber nur ein if-else):

if($p) {
 $abc = 'mein_langer_text';
 $def = 'mein_langer_text';
 $ghi = 'mein_langer_text';
 $jkl = 'mein_langer_text';
 $mno = 'mein_langer_text';
 ...
}
else {
 $abc = '';
 $def = '';
 $ghi = '';
 $jkl = '';
 $mno = '';
 ...
}

Zweite Version (wenig Schreibarbeit aber viele if-else):

$abc = ($p)?'mein_langer_text':'';
 $def = ($p)?'mein_langer_text':'';
 $ghi = ($p)?'mein_langer_text':'';
 $jkl = ($p)?'mein_langer_text':'';
 $mno = ($p)?'mein_langer_text':'';
 ...

Danke.

  1. Erste Version (viel Schreibarbeit aber nur ein if-else):
    Zweite Version (wenig Schreibarbeit aber viele if-else):

    Bechmarke es - ich würde aber prinzipiell davon ausgehen, dass die erste variante schneller ist, da die Auswertung nur 1x stattzufinden hat - ob und inwieweit sich PHP bereits evaulierte Ausdrücke merken kann, weiß ich nicht.

    Wenn du den Zweck deines Vorhabens nicht verschwiegen hättest, würde man dir aber ggf. eine bessere Lösung vorschlagen können.

    Geht's ein Konfigurationsfile für eine Lokalisierung?

    if ($sprache = 'de') {  
      $amount = "Anzahl";  
    } else if ($sprache = 'en') {  
      $amount = "amount";  
    }
    

    Sowas geht auch wesentlich einfacher und möglicherweise sogar ganz ohne Verzweigung.

    1. Wenn du den Zweck deines Vorhabens nicht verschwiegen hättest, ...

      Sorry

      Geht's ein Konfigurationsfile für eine Lokalisierung?

      Jupp

      1. Wenn du den Zweck deines Vorhabens nicht verschwiegen hättest, ...
        Sorry

        Geht's ein Konfigurationsfile für eine Lokalisierung?
        Jupp

        Wie wäre es mit einem Array?

        $lang_config = array(  
          'de' => array(  
            'string1' => 'wert1',  
            'string2' => 'wert2',  
            'string3' => 'wert3'  
          ),  
          'en' => array(  
            'string1' => 'value1',  
            'string2' => 'value2',  
            'string3' => 'value3'  
          )  
        );
        

        Darauf zugreifen kannst du auf verschiedene Arten

        Die einfachste Variante ist folgende:

        $lang = 'de';  
        echo $lang_config[$lang]['string'];
        

        Eine Alternative ist, dass du dir je nach gewählter Sprache das betreffende Array in ein anderes kopierst:

        $lang = 'de';  
        $lang_values = $lang_config[$lang];  
        echo $lang_values['string'];
        

        Die Deluxe-Variante ist eine Funktion mit Fallback-Mechanismus - da kommst du aber um die Verzweigung nicht herum.

        Du prüfst ob in deinem Array der gewünschte Schlüssel in der gewünschten Sprache existiet, wenn nicht, dann versuchst du es mit der nächsten usw bis letztendlich die Defaultsprache ausgliefert wird.

        Ein Aufruf der Funktion könnte dabei so aussehen:

        get_language('wert1', 'de');

        Allgemein ist es ratsam, wenn du auch die obengenannten gleich in so eine Funktion kapselst, damit du diese ggf. später erweitern kannst.

        Das praktische daran ist, dass du dir das Array z.B. auch aus einem XML-File oder einer CSV-Datei bauen kannst welches von einem Übersetzer wesentlich einfacher bearbeitet werden kann als eine PHP-Variablenwüste bzw. was dann von deiner Seite keine Aufwand erfordert.

        1. Danke, danke!

          Werd mich mal mit befassen.

          Paul

        2. @@suit:

          nuqneH

          $lang_config = array(

          'de' => array(
              'string1' => 'wert1',
              'string2' => 'wert2',
              'string3' => 'wert3'
            ),
            'en' => array(
              'string1' => 'value1',
              'string2' => 'value2',
              'string3' => 'value3'
            )
          );

            
          BTW, in PHP darf man – im Gegensatz zu anderen Sprachen, bspw. JavaScript – auch nach dem letzten Array-Element ein Komma setzen, was späteres Editieren vereinfacht:  
            
          ~~~php
          $lang_config = array(  
            'de' => array(  
              'string1' => 'wert1',  
              'string2' => 'wert2',  
              'string3' => 'wert3',  
            ),  
            'en' => array(  
              'string1' => 'value1',  
              'string2' => 'value2',  
              'string3' => 'value3',  
            ),  
          );
          

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. BTW, in PHP darf man – im Gegensatz zu anderen Sprachen, bspw. JavaScript – auch nach dem letzten Array-Element ein Komma setzen, was späteres Editieren vereinfacht:

            Ist das so? Ich ging bisher davon aus, dass man es in JavaScript auch darf, aber der IE einfach nicht damit klar kommt.

            Ich hab' mir darum angewöhnt den letzten Beistrich möglichst wegzulassen.

            1. Hi!

              BTW, in PHP darf man – im Gegensatz zu anderen Sprachen, bspw. JavaScript – auch nach dem letzten Array-Element ein Komma setzen, was späteres Editieren vereinfacht:
              Ist das so?

              Ja, für PHP. Aber für andere Systeme muss man das Verhalten testen. Einige melden einen Syntaxfehler, andere fügen dann ein leeres Element ein.

              Lo!

              1. BTW, in PHP darf man – im Gegensatz zu anderen Sprachen, bspw. JavaScript – auch nach dem letzten Array-Element ein Komma setzen, was späteres Editieren vereinfacht:
                Ist das so?

                Ja, für PHP.

                Das ist mir klar, das "Ist das so?" war auf JavaScript bezogen.

    2. Hi!

      Erste Version (viel Schreibarbeit aber nur ein if-else):
      Zweite Version (wenig Schreibarbeit aber viele if-else):
      Bechmarke es - ich würde aber prinzipiell davon ausgehen, dass die erste variante schneller ist, da die Auswertung nur 1x stattzufinden hat

      Das wird sich beides nicht vom Grundrauschen abheben, jedenfalls nicht bei den geringen Datenmengen. Performance ist erst ab Pi mal Daumen mal 1 Million solcher simpler Operationen interessant.

      ob und inwieweit sich PHP bereits evaulierte Ausdrücke merken kann, weiß ich nicht.

      Sicher nicht. Der Aufwand, gleiche Operationen zu finden, wäre höchstens bei konstanten Ausdrücken sinnvoll, bringt aber bei immer wieder neu abzuarbeitenden Scripts und den kleinen Datenmengen keinen großen Vorteil. Variablen können ihren Inhalt ändern, so dass sie stets neu ausgewertet werden müssen, wenn es da nicht eine Überwachung des bisherigen Programmablaufs gibt, die Änderungen ausschließen kann.

      Lo!

  2. Hi,

    else {
    $abc = '';
    $def = '';
    $ghi = '';
    $jkl = '';
    $mno = '';
    ...
    }

    else {  
      $abc = $def = $ghi = $jkl = $mno = '';  
    }
    

    Und wahlweise auch nicht als else-Zweig, sondern als generelle Initialisierung vor der ggf. anschließenden Zuweisung anderer Werte.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?