Jürgen: Was ist der Unterschied zwischen = oder ==

Hallo!

Ich mache folgendes:
In meiner Datenbank hat $var den Wert 1.

if ($var = 1) {
echo "irgendwas";
}

Bei diesem Statement führt er das echo aus, wenn ich jedoch aus $var = 1 folgendes machen $var == 1 dann macht er nichts. Wenn ich dann aber in der Datenbank der Wert von $var auf 0 setze dann führt er es schon aus.
Heisst == dann "ist nicht gleich" ?
Ich konnte leider dazu keine Erklärung finden auf php.net, ich wusste auch nicht recht nach was ich suchen soll...
Vielen Dank schon mal im voraus.

Liebe Grüße aus Wien,
Jürgen

  1. Hi,

    In meiner Datenbank hat $var den Wert 1.

    1 oder '1'? Das ist ein Unterschied.

    if ($var = 1) {

    "Wenn die Zuweisung des Wertes 1 zur Variable $var erfolgreich ist..."

    Heisst == dann "ist nicht gleich" ?

    Nein, das heißt "wenn der Wert drinsteht", im Gegensatz zu "wenn die Zuweisung klappt".

    Du kannst mal mit "if ($var = 2)" testen und Dir anschließend $var ausgeben lassen.

    Ich konnte leider dazu keine Erklärung finden auf php.net,

    *g* Das ist in so ziemlich allen Sprachen gleich :-) "=" ist eine Zuweisung, "==" eine Gleichheitsprüfung[1].

    Cheatah

    [1] Perl z.B. unterscheidet hier noch zwischen "==" für nummerische Prüfungen und "eq" für Strings.

    1. Hoi,

      In meiner Datenbank hat $var den Wert 1.

      1 oder '1'? Das ist ein Unterschied.

      Nicht in PHP, nicht in diesem Zusammenhang :-) Stichwort typecast.

      Ich konnte leider dazu keine Erklärung finden auf php.net,

      *g* Das ist in so ziemlich allen Sprachen gleich :-) "=" ist eine Zuweisung,
      "==" eine Gleichheitsprüfung[1].

      In allen C-aehnlichen Sprachen ;-) Weder PASCAL, noch BASIC haben diese
      Unterscheidung.

      Gruesse aus dem schoenen LH,
       c.j.k

      1. In allen C-aehnlichen Sprachen ;-) Weder PASCAL, noch BASIC haben diese
        Unterscheidung.

        Sorry Christian, das stimmt nicht. in Pascal gibt es = für Vergleiche und := für Zuweisungen.
        Mark

        1. Hoi, <-- Begruessung

          In allen C-aehnlichen Sprachen ;-) Weder PASCAL, noch BASIC haben diese
          Unterscheidung.

          Sorry Christian, das stimmt nicht. in Pascal gibt es = für Vergleiche und :=
          für Zuweisungen.

          Urghs, stimmt. Zu lange kein Pascal mehr geschrieben, sorry...

          Gruesse aus dem schoenen LH,
           c.j.k

    2. Hi,

      In meiner Datenbank hat $var den Wert 1.

      1 oder '1'? Das ist ein Unterschied.

      Was ist den da der Unterschied? Ich habe nur 1 oder 0 in der Datenbank stehen.
      Muss ich vielleicht '1' oder '0'`in die datenbank eintragen?

      1. Hallo,

        um die Eigenheiten der korrekten Notation nochmal zu verdeutlichen (womit Programmier-Starter haeufig Probleme haben), hat Cheatah halt mal das Beispiel des Unterschiedes von Text und Zahl herangezogen.

        Obwohl PHP mit den unterschiedlichen Variablentypen relativ lax umgeht, ist dennoch 1 eine Zahl, aber '1' ein String. Wenn das Feld in der Datenbank also z.B. vom Typ CHAR oder TEXT ist, kriegen wir ein '1'. Bei INT oder FLOAT eine astreine 1.

        Gruesse

        gr@phics.de

      2. Moin!

        In meiner Datenbank hat $var den Wert 1.

        1 oder '1'? Das ist ein Unterschied.

        Was ist den da der Unterschied? Ich habe nur 1 oder 0 in der Datenbank stehen.
        Muss ich vielleicht '1' oder '0'`in die datenbank eintragen?

        Ich finde, folgendes ist noch nicht deutlich geworden:

        So vergleichst du die Variable mit dem Wert:

        if ($var == wert) ...

        So weist du der Variablen den Wert zu (was meist erfolgreich ist, weshalb der if-Teil auch meist ausgeführt wird)

        if ($var = wert) ...

        Bei Variante 1 behält $var den Wert. Bei Variante 2 ändert er sich. Das ist eigentlich nur ganz selten erwünscht.

        Fazit: Beim "Ver-Gleich" (zwei Silben, also zwei ==) stellt man fest, was in der Variablen drin ist, und bei Zuweisungen (nur ein =) ändert man die Variable.

        Wenn also dein Ver-Gleich nicht funktioniert hat, dann liegts mit Sicherheit daran, daß in der Variablen nicht das drinsteht, was du erwartet hast. Lass dir den Inhalt der Variablen vor dem IF mal mit echo ausgeben, und schau, was drinsteht.

        - Sven Rautenberg

    3. Moin,

      if ($var = 1) {

      "Wenn die Zuweisung des Wertes 1 zur Variable $var erfolgreich ist..."

      Nein, da steht: "Weise 1 an $var zu, und wenn $var dann wahr ist..."

      --
      Henryk Plötz
      Grüße von der Ostsee

  2. Tag!

    Hätte da auch noch was:

    $a = 1 ist z.B. eine gewöhnliche Wertzuweisung...

    Dann noch aus dem PHP Manual (zur Verfollständigung):

    $a == $b Gibt "wahr" zurück, wenn von $a gleich $b ist.
    $a === $b Gibt "wahr" zurück wenn $a gleich $b ist und beide vom gleichen Typ sind(funktioniert nur in PHP4)
    $a != $b Gibt "wahr" zurück, wenn $a nicht gleich $b ist.
    $a < $b Gibt "wahr" zurück, wenn $a kleiner als $b ist.
    $a > $b Gibt "wahr" zurück, wenn $a größer als $b ist.
    $a <= $b Gibt "wahr" zurück, wenn $a kleiner oder gleich $b ist.
    $a >= $b Gibt "wahr" zurück, wenn $a größer oder gleich $b ist.

    Also:
    Wenn $a == 1 ist, dann bedeutet das, das in $a entweder 1 oder '1' drinn steht. Wenn $a === 1 ist, dann kann $a nur die 1 enthalten.

    nochwas zu Floatwerten: In PHP hab ich das noch nicht getestet, aber in C würde eine Variable vom Typ float, wenn Ihr der Wert 1 zugewiesen würde, 1.0 enthalten - was dann auch so ausgegeben würde. Also wäre dann beim vergleich inklusive Typenprüfung die 1 ungleich der 1.0.

    Ich hoffe die Verwirrung ist nun vollendet...

    bye
    ich