[PHP] Objekte vergleichen + eval

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Emanuelle_1982
Mitglied
Beiträge: 535
Registriert: 06.03.2006 18:37
Wohnort: Nümbrecht & Siegen
Kontaktdaten:

[PHP] Objekte vergleichen + eval

Beitrag von Emanuelle_1982 »

Hallo,
ich glaube ich habe einen Fehler in PHP gefunden, und zwar beim Vergleich von 2 Objekten mit === über eine Methode die den Vergleich mithilfe eval ausführt, und eine static Methode einer Klasse nutzt (und nur dann)
egal was für objekte (solange es irgendeine Instanz oder Ableitung ist) dann verglichen werden - angeblich sind alle gleich

Hinweis: nur mit dem aktuellem Xampp 1.6 (PHP 5.2.1) getestet

also
2 objekte werden so erstellt

Code: Alles auswählen

$o1 = new obj('1');
$o2 = new obj('2');
$o3 = new objExt('3'); // abgeleitet von obj
also müssen alle vergleiche mit === fehlschlagen, egal welche der 3 miteinander verglichen werden

das stimmt aber nur in folgenden 4 Fällen (es soll Fehler angezeigt werden)
  1. if (o1 === $o2) echo 'fehler';
  2. eval('if (o1 === $o2) echo 'fehler';');
  3. Assert::equals($o1, $o2);
  4. eval('Assert::equals($o1, $o2);');
die Methode equals in der Klasse Assert schaut ungefähr so aus

Code: Alles auswählen

public static function equals($expected, $actual, $message = '') {
	if (gettype($expected) == gettype($actual)) {
		if ($expected === $actual) {
			echo 'fehler';
		}
	}
}
die Methode über die ich das Assert ausführe schaut ungefähr so aus:

Code: Alles auswählen

function doIt($eval) {
	eval($eval);
}
nun zu der fehlerhaften Zeile:
doIt('Assert::equals($o1, $o2);');
es wird kein Fehler mehr angezeigt, jedoch bei Werten wie 3 und 3 oder string und string

Sorry für die ganzen Code Schnipsel... insgesamt erstreckt sich das über einige Dateien und ich hoffe alles gefunden zu haben, wenn nicht kann ich die beteiligten Dateien ungekürzt per email zuschicken

Liebe Grüße
Emma
Antworten

Zurück zu „Coding & Technik“