planloser: Logische Operatoren in if ... else ...

hi

wie kann man logische operatoren (und, oder) in verbindung mit If-Else nutzen??

z.B.

if (!$nr = $_GET['nr'] or $nr<=1 ){$nr=1;};

es funktioniert zwar, bin mir aber nicht sicher, ob das auch sauber geschrieben ist.

  1. Hi,

    if (!$nr = $_GET['nr'] or $nr<=1 ){$nr=1;};

    Im Prinzip müsste das einigermaßen OK sein, wobei ich für die Zukunft (Übersichtlichkeit) eine saubere(re) Klammerung vorschlagen würde, Extremvariante
    if ((!($nr = $_GET['nr'])) or ($nr <= 1))
    --> Man weiß worauf das ! wirkt (ganze Klammer) und welche Teile zum Ausdruck gehören. Spätestens wenn du NOT, AND und OR mischt werden die Klammern sehr wichtig.

    Dann ist es IMHO unüblich or/and als Operatoren einzusetzen, in der Praxis dürfte sich && für and und || für or durchgesetzt haben.

    MfG
    Rouven

    --
    -------------------
    ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
    1. Hallo Rouven.

      if ((!($nr = $_GET['nr'])) or ($nr <= 1))

      Was soll der erste Teilausdruck für einen Sinn ergeben?

      Einen schönen Sonntag noch.

      Gruß, Ashura

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]
      1. Hi,

        if ((!($nr = $_GET['nr'])) or ($nr <= 1))
        Was soll der erste Teilausdruck für einen Sinn ergeben?

        ah, right, got it. Nicht genau genug hingesehen. Hey, das ist doch auch unfair, der Betreff lautete logische Operatoren, da kann doch einer verlangen, dass ich auch auf solche Fehler im Hintergrund-Rauschen achte... ;-)

        MfG
        Rouven

        --
        -------------------
        ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
      2. Hi,

        if ((!($nr = $_GET['nr'])) or ($nr <= 1))

        Was soll der erste Teilausdruck für einen Sinn ergeben?

        Es erfolgt die Zuweisung von $_GET['nr'] an $nr, dann wird ausgewertet, ob der Wert true oder false ergibt und das dann noch mit dem ! negiert.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hallo MudGuard.

          if ((!($nr = $_GET['nr'])) or ($nr <= 1))

          Was soll der erste Teilausdruck für einen Sinn ergeben?

          Es erfolgt die Zuweisung von $_GET['nr'] an $nr, dann wird ausgewertet, ob der Wert true oder false ergibt und das dann noch mit dem ! negiert.

          Ja, das habe ich mir im Nachhinein auch zusammengereimt; $nr müsste deshalb nach der Zuweisung den Wert „“ oder „0“ haben, damit dieses dank Typenumwandlung zu Boolean und der Negation true zurückgeben kann.

          Aber einen Sinn erkenne ich darin immer noch nicht.

          Einen schönen Sonntag noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
          1. Hi,

            Ja, das habe ich mir im Nachhinein auch zusammengereimt; $nr müsste deshalb nach der Zuweisung den Wert „“ oder „0“ haben, damit dieses dank Typenumwandlung zu Boolean und der Negation true zurückgeben kann.
            Aber einen Sinn erkenne ich darin immer noch nicht.

            Hier in diesem konkreten Fall vielleicht nicht.

            Aber oft ist es so, daß Funktionen 0 oder false im "Fehlerfall" zurückliefern, ansonsten irgendein Objekt.
            Da kann man das gut ausnützen.

            while ($row = mysql_fetch_row($result))
            {
               echo $row['bla'];
            }

            ist ja im Prinzip das gleiche (der Zuweisungswert wird als Bedingung ausgewertet).
            Solange es noch eine weitere Zeile gibt, liefert mysql_fetch... einen von 0 (bzw. false) verschiedenen Wert - es wird ein weiterer Schleifendurchgang gestartet, dort steht die Zeile in $row zur Verfügung.
            Gibt es keine weitere Zeile, kommt false dabei raus, die Schleife wird abgebrochen ...

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Schreinerei Waechter
            O o ostern ...
            Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Hallo planloser.

    if (!$nr = $_GET['nr'] or $nr<=1 ){$nr=1;};

    es funktioniert zwar, bin mir aber nicht sicher, ob das auch sauber geschrieben ist.

    Dass dies funktioniert verwundert mich allerdings ein wenig. Du meintest sicher folgendes:

    if ($nr != $_GET['nr'] or $nr <= 1) {  
      
      $nr = 1;  
      
    }
    

    Einen schönen Sonntag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. Hi,

      Dass dies funktioniert verwundert mich allerdings ein wenig.

      das wundert dich weshalb? Wenn PHP den Vergleich vor der Negation abarbeitet sind die beiden doch gleichwertig, oder nicht? Laut Operator Precedence müsste es das...

      MfG
      Rouven

      --
      -------------------
      ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
      1. Hallo Rouven.

        Dass dies funktioniert verwundert mich allerdings ein wenig.

        das wundert dich weshalb?

        Deshalb.

        Einen schönen Sonntag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]