tami: "==" auch bei Arrays und Objekten "gefährlich" ...;

Beitrag lesen

hi Sven,

Spannend wirds beim Vergleich von zwei Arrays oder zwei Objekten:

Bei zwei Arrays prüft "==" lediglich, dass dieselben Keys und Values in beiden Arrays vorhanden sind. Mit "===" müssen diese aber außerdem noch in derselben Reihenfolge vorliegen und denselben Typ haben.
Wenn es also nur darum geht, dass die Werte in Array 1, die ich über irgendeine Funktion eingesammelt habe, "gleich" dem Array 2 ist, ist der Vergleich mit "==" vermutlich schlauer, sofern mich die Reihenfolge nicht interessiert, und ich auf die interne Typprüfung verzichten kann.

Also ich sage mal, dass das "nicht sinnvoll" ist und gebe folgenden Code zu bedenken:

  
$myArray1[0] = "1abc";  
$myArray1[1] = "1cde";  
$myArray2["0"] = 1;  
$myArray2["1"] = 1;  
var_dump($myArray1 == $myArray2);  

Ergebnis: bool(true)

Da könnte ich jetzt vermutlich noch mehr Unfug einbauen.

Bei Objekten ist es ganz ähnlich: Der strikte Vergleich ist nur dann wahr, wenn ich in den zwei Variablen zweimal dieselbe Instanz des Objekts stehen habe. Der Vergleich mit "==" hingegen ist wahr, wenn die zwei Objekte von derselben Klasse sind und ihre Eigenschaften gleich sind. Wobei anzumerken ist, dass hier vermutlich der Äquivalenzvergleich === häufiger anzutreffen ist, weil man vermutlich zum komplexeren Vergleich zweier Objekte sowieso eigenen Code schreiben muss. Die identische Instanz zu erkennen ist hingegen alternativlos.

  
class Minimal {  
	public function __construct($a, $b) {  
		$this->a = $a;  
		$this->b = $b;  
	}  
}  
$objA = new Minimal("1abc", "2def");  
$objB = new Minimal(1,2);  
var_dump($objA == $objB);  

Gibt auch bool(true).

Wie macht das Sinn???

Ich denke, beim Array müsste man vorher sortieren mit keysort oder was auch immer und dann mit "===" vergleichen. Und bei Objekten - wenn ich die überhaupt mal und wenn ja in welchem Anwendungsfall??? vergleichen wollen würde - schreibst Du ja auch, macht dann nur in der Regel  "===" Sinn.

Ich bleibe jetzt mal bei meiner zugegeben etwas provokanten These, dass "==" allenfalls ein Einfallstor für Bugs ist und deshalb _nicht_ verwendet werden sollte ;-). But: I do not want to hurt anybodys feelings!!! ;-)))

mfg

tami

0 49

Gültigkeit von Variablen

Kenan
  • php
  1. 0
    dedlfix
    1. 0
      T-Rex
      1. 0
        dedlfix
        1. 0

          Gültigkeit von Variablen - Lesbarkeit und Konvention

          tami
          1. 0
            dedlfix
            1. 0
              tami
              1. 0
                dedlfix
                1. 0
                  tami
                  1. 0
                    dedlfix
                    1. 0

                      Lesbarkeit und Konvention in PHP und Javascript

                      tami
                      1. 0
                        dedlfix
                        1. 0
                          tami
                          1. 0
                            dedlfix
                            1. 0

                              Lesbarkeit und Konvention in PHP und Javascript "==" und "==="

                              tami
                              1. 0
                                dedlfix
                                1. 0
                                  tami
                                  1. 0
                                    dedlfix
                                    1. 0

                                      Lesbarkeit und Konvention .- "heile Welt ... zusammenlügen"

                                      tami
                                      1. 0
                                        dedlfix
                                  2. 0
                                    Sven Rautenberg
                                    1. 0
                                      tami
                                      1. 0
                                        tami
                                      2. 1
                                        Sven Rautenberg
                                        1. 0

                                          Wo funktioniert (braucht man) "==" und nicht "==="

                                          tami
                                          1. 0
                                            Matthias Apsel
                                            1. 0
                                              tami
                                            2. 1
                                              Sven Rautenberg
                                              1. 0

                                                "==" auch bei Arrays und Objekten "gefährlich" ...;

                                                tami
                                                1. 0
                                                  dedlfix
                                                  1. 0

                                                    "==" auch bei Arrays und Objekten "gefährlich"/fehleranfällig

                                                    tami
                                                    1. 0
                                                      dedlfix
                                                      1. 0
                                                        tami
                                                        1. 0
                                                          bubble
                                                          1. 0
                                                            tami
                                                            1. 0
                                                              dedlfix
                                                              1. 0
                                                                tami
                                                2. 2
                                                  Sven Rautenberg
                                                  1. 0

                                                    "==" bei Arrays "gefährlich"? Crockford on Programming Style...

                                                    tami
                                          2. 0
                                            Matthias Apsel
  2. 0
    tami
    1. 0
      dedlfix
      1. 0

        Gültigkeit von Variablen - Coding Style

        tami
        1. 0
          dedlfix
          1. 0
            tami
  3. 0
    Sven Rautenberg
    1. 0

      Variablen-Initialisierung mit "null" === Prinzipienbefriedigung?

      tami
      1. 0
        dedlfix
      2. 0
        Sven Rautenberg