LSpreee: Syntaxabkürzung

Hallo Leute,

was macht diese Zeile:

$var1=$var2[0]>0;
Und kennt jemand eine Seite, wo solche Abkürzungen aufgelistet sind?

Vielen Dank für Eure Beteiligung.

  1. Liebe(r) LSpreee,

    was macht diese Zeile:

    $var1=$var2[0]>0;

    diese Zeile weist der Variablen $var1 einen Boolschen Wert (entweder true oder false) zu, abhängig davon, ob das erste Array-Element von $var2 (Arrays beginnen mit "0" als erstem Index) einen Wert größer null enthält.

    Und kennt jemand eine Seite, wo solche Abkürzungen aufgelistet sind?

    Welche "Abkürzungen"? Das ist doch sehr ausführlich, oder etwa nicht?

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. S*****
      Vielen Dank, ich dachte die ganze Zeit, dass var1 zu var2 wird, wenn var2 größer null. Jetzt macht das Skript mehr Sinn :)

      Dankeeee.

      Welche "Abkürzungen"? Das ist doch sehr ausführlich, oder etwa nicht?

      Ist auf jeden Fall nicht selbserklärend. Genau wie zum Beispiel
      $var1 = ($var2?1:0);

      Das musste ich auch erstmal ins Forum posten. Denn wie soll man danch googlen? Da habe ich keine Ahnung. Es sei denn, es gebe eine Seite, wo solche Abkürzungen aufgeführt sind. Und sag jetzt bitte nicht php.net. Ich bin ganz sicher, dass es dort irgendwo steht, aber danach kann man ja nicht gezielt suchen, wenn man nicht weiß, zu welchem Operator es gehört.

      Liebe Grüße
      und vielen Dank

      1. Ist auf jeden Fall nicht selbserklärend. Genau wie zum Beispiel
        $var1 = ($var2?1:0);

        Bist du sicher, dass die Klammer richtig gesetzt ist?

        Ich kenne es so:
        $var1 = ($var2) ? 1 : 0;

        Wenn $var2 (zwischen den Klammern muss TRUE oder FALSE gebildet werden) vorhanden ist, bekommt var1 den Wert 1, sonst den Wert 0.

        Kalle

        1.   
          <?php  
            
          $var1=true;  
            
          //geht  
            
          echo "1:<br>";  
          echo $var1?"honig":"kuchen";  
          echo "<br><br><br>";  
            
          echo "2:<br>";  
          echo ($var1)?"honig":"kuchen";  
          echo "<br><br><br>";  
            
          echo "3:<br>";  
          echo ($var1?"honig":"kuchen");  
          echo "<br><br><br>";  
            
          //geht nicht  
            
          echo "4:<br>";  
          echo ($var1?)"honig":"kuchen";  
          echo "<br><br><br>";  
            
            
            
          ?>  
          
          
          1. $var1=true;

            Gut, den Inhalt von $var1 hast du bisher nicht verraten. Dass er TRUE oder FALSE ist, scheint ein Sonderfall zu sein.

            //geht

            echo "1:<br>";
            echo $var1?"honig":"kuchen";
            echo "<br><br><br>";

            Und das hier:

            $var1 = "Katze";
            echo "5:<br>";
            echo $var1=="Hund"?"Frisst Knochen":"Frisst Fisch";

            Vermute, dass die Klammern um $var1=="Hund" dringend gebraucht werden.

            Kalle

            1. Hi!

              echo $var1=="Hund"?"Frisst Knochen":"Frisst Fisch";
              Vermute, dass die Klammern um $var1=="Hund" dringend gebraucht werden.

              Das Handbuch-Kapitel zu den Operatoren gibt auch hier die Antwort, nämlich im Abschnitt Operator Precedence (Rangfolge). Die Vergleichsoperatoren, wozu auch == gehört, sind stärker als ?:, die Klammern sind also nicht erforderlich.

              Generell müssen die Klammern nicht gesetzt werden, wenn die Operatoren-Rangfolge der gewünschten Abarbeitungsreihenfolge entspricht. Sie trotzdem zu setzen, kann helfen die eigene Intention deutlicher sichtbar zu machen. Damit fällt dann bei einer Code-Durchsicht die Beantwortung solcher Fragen einfacher: "Hat er nun die Operatorenreihenfolge beachtet und den Ausdruck bewusst so hingeschrieben oder ist das ein Fehler und es hätte geklammert werden müssen?"

              Lo!

      2. Hi,

        Welche "Abkürzungen"? Das ist doch sehr ausführlich, oder etwa nicht?
        Ist auf jeden Fall nicht selbserklärend.

        Doch, ist es - wenn man sich mit Ausdrücken generell beschäftigt hat.

        Genau wie zum Beispiel
        $var1 = ($var2?1:0);

        Das musste ich auch erstmal ins Forum posten. Denn wie soll man danch googlen?

        Google: was bedeutet das fragezeichen in php?

        Es sei denn, es gebe eine Seite, wo solche Abkürzungen aufgeführt sind. Und sag jetzt bitte nicht php.net.

        Was denn sonst?

        Wenn du Programmieren willst, dann musst du auch lernen, mit Handbüchern zur jeweiligen Sprache umzugehen.

        Ich bin ganz sicher, dass es dort irgendwo steht, aber danach kann man ja nicht gezielt suchen, wenn man nicht weiß, zu welchem Operator es gehört.

        Grundlagenkapitel sollte man generell mal durchgearbeitet haben.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    2. Hello,

      was macht diese Zeile:

      $var1=$var2[0]>0;

      diese Zeile weist der Variablen $var1 einen Boolschen Wert (entweder true oder false) zu, abhängig davon, ob das erste Array-Element von $var2 (Arrays beginnen mit "0" als erstem Index) einen Wert größer null enthält.

      ...ob der Weert des Array-Elementes mit dem Index 0 größer als 0 ist.
      Es muss weder das erste Element sein, noch ist es obligatorisch, dass Arrays in PHP mit dem Index 0 beginnen.

      Ein Array in PHP kann rein numerische Index haben,
      Ein Array in PHP kann reine String-Index haben (literale Indexe)
      Ein Array in PHP kann gleichzeitig numerische und literale (String-) Indexe haben.

      Die Arrays mit literalen Indexen nennt man dann in PHP assoziative Arrays.

      @LSpree:

      Diese Kurzschreibweise findet man in vielen (höheren) Programmiersprachen.
      Sie bedeutet:

      if ($var2[0] > 0)
          {
              $var1 = true;
          }
          else
          {
              $var1 = false;
          }

      So würde das aber kein Programmierer mehr schreiben.
      Allerdings gibt es einige, die Wert darauf legen, bei der Kurzschreibweise zusätzlich Klammern zu setzen:

      $var1 = ($var2[0] > 0);

      Das ist formal richtig und vereinfacht das Erkennen des Zusammenhangs, speziell auch dann, wenn der Ausdruck auf der rechten Seite komplexer wird. Es ist aber keinesfalls notwendig.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi!

        Diese Kurzschreibweise findet man in vielen (höheren) Programmiersprachen.

        Wieso Kurzschreibweise? Es ist das Normalste von der Welt, das Ausdrucksergebnis direkt einer Variable zuzuweisen.

        $a = $b + $c;

        Hier würdest du auch nicht von einer Kurzschreibweise reden. Bei

        $a = $b > $c;

        kommt eben true oder false als Ergebnis. Im Gegensatz zur Mathematik werden beim Programmieren nicht nur Berechnungsausdrücke geschrieben sondern auch solche, die beispielsweise Vergleiche anstellen.

        Sie bedeutet:

        if ($var2[0] > 0)
            {
                $var1 = true;
            }
            else
            {
                $var1 = false;
            }
        So würde das aber kein Programmierer mehr schreiben.

        Eben. Diese "Schreibweise" mag der Erklärung dienen, ist aber ansonsten nicht besonders gut. Sie ist umständlich: "Wenn es wahr ist, dass $b größer als $c ist, dann weise $a 'wahr' zu, ansonsten weise $a 'unwahr' zu." Sie verwirrt: "Warum so ausführlich, steckt vielleicht eine andere Logik als bei einer einfachen Zuweisung dahinter?" Sie verbraucht mehr Rechenzeit (auch wennn sie bei einer geringen Anzahl von Ausführungen im Grundrauschen untergehen wird).

        Allerdings gibt es einige, die Wert darauf legen, bei der Kurzschreibweise zusätzlich Klammern zu setzen:
            $var1 = ($var2[0] > 0);

        Bei einem einfachen komplett eindeutigen Ausdruck? Nichts gegen eine Klammerung, wenn sie der Eindeutigkeit dient, aber wer es nur aus Prinzip macht und Konventionen über Sinnfälligkeit stellt, sollte sich auch nicht wundern, wenn die überflüssigen Klammern irgendwann schaden.

        Der Unterschied zwischen einem

        return ($var);

        und einem

        return $var;

        ist, dass bei der Klammerung von $var ein Ausdruck entsteht, der aufgrund der Klammern zuerst berechnet wird, wobei ein Ausdrucksergebnis entsteht, das dann über das return zurückgegeben wird. Im Falle ohne Klammern wird der Variableninhalt direkt zurückgegeben. Das hat dann Auswirkungen, wenn man mit Referenzen arbeitet. Auf Variablen kann man Referenzen legen, auf Ausdrucksergebnisse nicht.

        Lo!

  2. Hi!

    Und kennt jemand eine Seite, wo solche Abkürzungen aufgelistet sind?

    Ja, das Manual der jeweiligen Programmiersprache, besonders die Seite über die Operatoren.

    Lo!