dALoL: time()

Hi all,
Ich vergleiche Werte aus der Funktion time.
If ($a < $b OR $a > $c)
  echo $ERROR;

So dies ist die Abfrage, welche mir Problem macht.
Ich falle immer in den error rein obwohl:
$a = 1076685737
$b = 1076685722
$c = 1132142405

$a ist somit NICHT kleiner als $b
UND
$a ist NICHT grösser als $c

Weshalb fällt er immer in das true rein? Bin total confused...

Danke & Gruess
dALoL

  1. Hi,

    Ich vergleiche Werte aus der Funktion time.
    If ($a < $b OR $a > $c)

    soso.

    So dies ist die Abfrage, welche mir Problem macht.
    Ich falle immer in den error rein obwohl:
    $a = 1076685737
    $b = 1076685722
    $c = 1132142405

    Und wo siehst Du bei dem Problem einen Zusammenhang zu time()? Ändert es sich, wenn Du die Zahlenwerte nicht austime() ermittelst, sondern irgendwo anders herholst?

    Weshalb fällt er immer in das true rein? Bin total confused...

    Wegen der Operator-Rangfolge. Worauf bezieht sich Dein "OR"?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hello,

    Ich vergleiche Werte aus der Funktion time.
    If ($a < $b OR $a > $c)
      echo $ERROR;

    1. Mindestens zum Lernen Klammern setzen
    2. http://www.php.net/manual/en/language.operators.php durcharbeiten

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  3. echo $begrüßung;

    $a = 1076685737
    $b = 1076685722
    $c = 1132142405
    If ($a < $b OR $a > $c)
      echo $ERROR;

    $a ist somit NICHT kleiner als $b
    UND
    $a ist NICHT grösser als $c
    Weshalb fällt er immer in das true rein? Bin total confused...

    Das Problem kann ich mit den gegebenen Werten nicht nachvollziehen. Die Teilausdrücke $a < $b und $a > $c und demzufolge auch der Gesamtausdruck ergeben false. Die erwähnte Operatorenrangfolge ist auch nicht die Ursache, denn OR hat eine niedrigere Priorität als ein Vergleich.

    Ich kann nur den allgemeinen Hinweis geben: Überprüfe die Werte und Ergebnisse der (Teil-)Ausdrücke mittels var_dump(). Ebenfalls nicht schaden kann ein auf E_ALL gestelltes error_reporting.

    echo "$verabschiedung $name";

    1. If ($a < $b OR $a > $c)
        echo $ERROR;

      $a ist somit NICHT kleiner als $b
      UND
      $a ist NICHT grösser als $c
      Weshalb fällt er immer in das true rein? Bin total confused...

      Das Problem kann ich mit den gegebenen Werten nicht nachvollziehen. Die Teilausdrücke $a < $b und $a > $c und demzufolge auch der Gesamtausdruck ergeben false. Die erwähnte Operatorenrangfolge ist auch nicht die Ursache, denn OR hat eine niedrigere Priorität als ein Vergleich.

      Tja, aber die geschweiften Klammern sollte man schon setzen...

      If ($a < $b OR $a > $c)
         echo $ERROR;
      Heißt doch das selbe wie
      If ($a < $b OR $a > $c) {}
         echo $ERROR;
      Oder menschlich: "Wenn $a kleiner $b oder $b größer $c dann tue nichts (sonst tue auch nichts). Anschließend gib den Fehler aus."

      If (($a < $b) OR ($a > $c)) {
         echo $ERROR;
      }

      wäre besser.

      1. Hallo KraKi(noAuth).

        Tja, aber die geschweiften Klammern sollte man schon setzen...

        Oder besser erst einmal die Syntax studieren.

        If ($a < $b OR $a > $c)

        echo $ERROR;
        Heißt doch das selbe wie
        If ($a < $b OR $a > $c) {}
           echo $ERROR;

          
        Nein. Wenn die geschweiften Klammern weggelassen werden, wird grundsätzlich das erste darauf folgende Kommando ausgeführt, sofern die Bedingung zutrifft. Es entsprich also folgendem:  
          
        ~~~php
        If ($a < $b OR $a > $c) {  
          
           echo $ERROR;  
        }
        

        (Und ich schreibe es auch fast grundsätzlich so.)

        Einen schönen Donnerstag noch.

        Gruß, Mathias

        --
        ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
        debian/rules
        1. Nein. Wenn die geschweiften Klammern weggelassen werden, wird grundsätzlich das erste darauf folgende Kommando ausgeführt, sofern die Bedingung zutrifft.

          Hm, ok, dann habe ich das wohl mit einer anderen Sprache verwechselt.

      2. echo $begrüßung;

        Tja, aber die geschweiften Klammern sollte man schon setzen...

        Dazu besteht kein Zwang. Nur wenn der bedingte Teil mehrere Anweisungen umfasst müssen diese geklammert werden.

        If ($a < $b OR $a > $c)
           echo $ERROR;
        Heißt doch das selbe wie
        If ($a < $b OR $a > $c) {}
           echo $ERROR;

        Nein, das ist weder das selbe noch das gleiche. Im ersten wird das echo in Abhängigkeit der Bedingung ausgeführt. Das zweite hat bei erfüllter Bedingung eine leere Anweisung auszuführen. Und das echo ist eine Anweisung, die auf den bedingten Teil folgt, aber kein Bestandteil dessen ist.

        If (($a < $b) OR ($a > $c)) {
           echo $ERROR;
        }

        Das entspricht von seiner Wirkung her exakt der ersten Variante.

        Damit haben wir immer noch nicht die Frage geklärt, warum der OP etwas anderes behauptet als sein geposteter Code tatsächlich macht.

        echo "$verabschiedung $name";