Bobby: Variablenproblem

Moin

Kann mir jemand den Unterschied zwischen:

  
$h1="Suchergebnisse Volltextsuche ".(isset($_GET['kat'])&& $_GET['kat']!="")?" - Kategorie ".$_GET['kat']:"";  

und

  
$h1="Suchergebnisse Volltextsuche ";  
$h1.=(isset($_GET['kat'])&& $_GET['kat']!="")?" - Kategorie ".$_GET['kat']:"";  

erläutern. Ich dachte man kann das so zusammenfassen. Aber leider löscht es bei der 1. Variante den String "Suchergebnisse Volltextsuche". Also worin besteht der Unterschied?

Gruß Bobby

--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  1. echo $begrüßung;

    Kann mir jemand den Unterschied zwischen:

    $h1="Suchergebnisse Volltextsuche ".(isset($_GET['kat'])&& $_GET['kat']!="")?" - Kategorie ".$_GET['kat']:"";

    und

    $h1="Suchergebnisse Volltextsuche ";

    $h1.=(isset($_GET['kat'])&& $_GET['kat']!="")?" - Kategorie ".$_GET['kat']:"";

    
    >   
    > erläutern.  
      
    [Operatoren-Rangfolge](http://www.php.net/manual/en/language.operators.precedence.php). Der . ist stärker als das ?:  
    Somit ergibt  
      
      "Suchergebnisse Volltextsuche " . true  
      
    und  
      
      "Suchergebnisse Volltextsuche " . false  
      
    immer einen String, der zu true evaluiert. Mithin ist das Ergebnis stets  
      
      " - Kategorie " . $\_GET['kat']  
      
    inklusive Notice, wenn $\_GET['kat'] nicht existiert.  
      
    
    > Ich dachte man kann das so zusammenfassen.  
      
    Klammere den zweiten Teil.  
      
      
    echo "$verabschiedung $name";
    
    1. Moin

      Danke ihr beiden. Wieder was gelernt...

      Gruß Bobby

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
      -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
      ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  2. Hi,

    $h1="Suchergebnisse Volltextsuche ".(isset($_GET['kat'])&& $_GET['kat']!="")?" - Kategorie ".$_GET['kat']:"";

    
    >   
    > ~~~php
      
    
    > $h1="Suchergebnisse Volltextsuche ";  
    > $h1.=(isset($_GET['kat'])&& $_GET['kat']!="")?" - Kategorie ".$_GET['kat']:"";  
    > 
    
    

    Ich dachte man kann das so zusammenfassen. Aber leider löscht es bei der 1. Variante den String "Suchergebnisse Volltextsuche". Also worin besteht der Unterschied?

    Der Unterschied besteht darin, dass bei der ersten Variante erst mal "Suchergebnisse Volltextsuche " und (isset($_GET['kat'])&& $_GET['kat']!="") mit dem Verkettungsoperator verknuepft werden - und anschliessend *darauf* der tenaere Operator ? angewandt wird.
    Das liegt an der Rangfolge der Operatoren.

    Beim der zweiten Variante passiert das nicht - dort kann sich der tenaere Operator nur auf das davor stehende in den Klammern beziehen, weil der komplette Ausdruck erst ausgewertet wird, bevor er ueber den .= Operator an die davor stehende Variable angehaengt wird.

    Und natuerlich kannst du auch die erste Variante benutzen - wenn du den tenaeren Ausdruck zusaetzlich einklammerst.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“