Wenn ich zwei verschiedene Objekte vergleiche, kehrt es zuerst zurück true
und dann danach print_r
(auf Objekten) zurückgegeben false
.
Aus dem PHP-Handbuch:
Zwei Objektinstanzen sind gleich, wenn sie dieselben Attribute und Werte haben und Instanzen derselben Klasse sind.
Aber hier habe ich zum Beispiel andere Werte gesetzt. Warum unterscheidet sich das Ergebnis zwischen PHP 5.4.0 – 5.5.7?
abstract class first
{
protected $someArray = array();
}
class second extends first
{
protected $someArray = array();
protected $someValue = null;
public function __construct($someValue)
{
$this->someValue = $someValue;
}
}
$objFirst = new second('123');
$objSecond = new second('321');
var_dump ($objFirst == $objSecond);
print_r($objFirst);
var_dump ($objFirst == $objSecond);
Ergebnis ist:
bool(true)
second Object ( [someArray:protected] =>
Array ( ) [someValue:protected] => 123 )
bool(false)
Aber was ich erwartet hatte war:
bool(false)
second Object ( [someArray:protected] =>
Array ( ) [someValue:protected] => 123 )
bool(false)
Nun, ich bestätige dies. Sehen 3v4l.org/B6qrN – seit 5.4.0 gibt es true/false. Seltsam
– Jasir
3. Januar 2014 um 22:56 Uhr
Das muss ein Fehler in PHP sein. Ich habe die Deklarationsreihenfolge von Eigenschaften in der zweiten Klasse vertauscht und wir erhalten überall falsch/falsch: 3v4l.org/6VQ14
– Jasir
3. Januar 2014 um 23:12 Uhr
Tatsächlich scheint das print_r das Verhalten zu beeinflussen – 3v4l.org/Z8l7r
– Danack
3. Januar 2014 um 23:31 Uhr
Kann mit aktuellem Master nicht mehr reproduziert werden. (auch bekannt als Fehler behoben)
– bwoebi
4. Januar 2014 um 0:34 Uhr
@Nadir-Sampaoli – abgesehen von Ihrem scherzhaften Kommentar, schauen Sie sich an, wie schnell der Fehler behoben wurde, nachdem er identifiziert wurde
– Markus Bäcker
4. Januar 2014 um 11:28 Uhr