PHP Kaputte IF-Condition?

FoxCore

Cadet 3rd Year
Registriert
Jan. 2008
Beiträge
41
Hallo Computerbase Forum!

anscheinend habe ich eine IF-Condition kaputt gemacht :(:

PHP:
echo $cat->parentCategory['ref'] . "==" . $category['name'] . "<br />";

if($cat->parentCategory['ref'] == $category['name'])
{
	echo "jaaa";
}

Kann mir jemand sagen, wieso ich nur folgende Ausgabe bekomme?

1==1

Richtig müsste es doch meiner Meinung nach so aussehen:

1==1
jaaa


Ein var_dump beider Variabeln ergibt folgendes:

$cat->parentCategory['ref']
object(SimpleXMLElement)#11 (1) { [0]=> string(1) "1" }

$category['name']
object(SimpleXMLElement)#11 (1) { [0]=> string(1) "1" }

Komisch, ich kanns mir nicht erklären... Kann mir jemand helfen?

Gruss,
FoxCore
 
Zuletzt bearbeitet:
könnte vl. sein dass du da nen string mit ner int variable verlgeichst...aber ich bin mir da grad nicht so sicher, weil ich habe irgendwie in erinnerung dass da php nicht so streng ist...aber lass dir mal nach der ersten ausgabe noch ein zeichen ausgeben dass du weißt dass es aus is...

weil
1==1 mit nem leerzeichen hinter dem 2ten 1 is was anderes als 1
z.B als:
1==1 < wäre ungültig
1==1< wäre eig. gültig....

schau dir das mal an
 
Probier einfach mal einen var_dump auf beide Werte und probier gegebenfalls einen typstarken Vergleich (===).

Poste das var_dump Ergebnis für beide Werte hierher, solltest du damit nicht selbst auf die Lösung kommen :)

@Zeroflow: Vergleiche zwischen verschiedenen Typen sind in PHP egal, solange man einen typschwachen Vergleich (==) macht
 
PHP:
echo $cat->parentCategory['ref'] . "==" . $category['name'] . "Hoffentlichkeinleerzeichenhier<br />";
if($cat->parentCategory['ref'] == $category['name'])
{
	$recursive = 1;
	echo "jaaa";
}

Ergibt mir folgende Ausgabe:

1==1Hoffentlichkeinleerzeichenhier

Oben habe ich noch die var_dump's eineditiert.. Die beiden Variabeln sind exakt gleich...
 
@Renegade: irgendsowas hatte ich eh im Kopf, aber da ich in letzter Zeit nur Java programmiere war ich mir da nicht so sicher...und java is in der Hinsicht doch sehr streng...

pfuh...das find ich dann komisch...weil asich sollte man if ja nicht irgendwie ruinieren können, und in beiden variablen steht ja genau 1 drin -.-
 
ich denke du vergleichst da 2 XMLObjekte
Ein var_dump beider Variabeln ergibt folgendes:

$cat->parentCategory['ref']
object(SimpleXMLElement)#11 (1) { [0]=> string(1) "1" }

$category['name']
object(SimpleXMLElement)#11 (1) { [0]=> string(1) "1" }
für mich als PHP leihe sieht es zwar so aus als wenn die beiden Variablen auf das GLEICHE XMLObjekt verweisen, das diese Objekte nicht gleich sind wäre aber eine logische schlussfolgerung aus deinem Problem beim if. Schau also wie du den Text aus dem XMLObjekt extrahierst, so wie echo das ja auch (automatisch) macht. In Java wäre das wohl eine toString() methode.
Ergänzung ()

Zeroflow schrieb:
@Renegade: irgendsowas hatte ich eh im Kopf, aber da ich in letzter Zeit nur Java programmiere war ich mir da nicht so sicher...und java is in der Hinsicht doch sehr streng...

pfuh...das find ich dann komisch...weil asich sollte man if ja nicht irgendwie ruinieren können, und in beiden variablen steht ja genau 1 drin -.-

ich denke nicht das in beiden Variablen NUR eine 1 steht! sondern ein ganzes XMLObjekt
 
Vielen Dank tr3bor, funktioniert tatsächlich, wenn ich die Variabeln zu Strings konvertiere...

Wieder was neues dazugelernt... Ich dachte die Inhalte der Variabeln werden verglichen, naja ist wohl nicht ganz so.

folgendes PHP-Script funktioniert nun wie gewünscht:

PHP:
echo $cat->parentCategory['ref'] . "==" . $category['name'] . "<br />";
					
if((string)$cat->parentCategory['ref'] == (string)$category['name'])
{
	echo "jaaa";
}
 
Zuletzt bearbeitet:
Stimmt, das sind Objekte. Trotzdem ist das komisch, denn ein Vergleich mit "==" sollte in PHP genau dann True ergeben, wenn beide Objekte die gleichen Attributwerte haben - was hier anscheinend der Fall ist.
 
Nein PHP vergleicht ob die Objekte die Selben sind
PHP:
a = new Object();
b = new Object();

if(a==b) //immer false

bei IF auf Objekten wird immer geschaut ob es sich um die SELBEN Objekte handelt nicht ob die Gleich sind!
 
Nicht in PHP 5. Klick den Link in meinem letzten Post. Der Vergleich, den du meinst, ist "===".
 
okay gut PHP vereinfacht ja in vielen Dingen das Leben.
Es kommt in dem Fall also besonders auf die PHP version an.
 
Momentan läuft PHP Version 5.3.1, kann aber sein dass irgendwo im PHP.ini ein Setting etwas zu streng eingestellt ist.
 
Du hast offensichtlich den Thread nicht gelesen :D
 
das casten an sich funktioniert bei php nicht wirklich. Es gibt einige Funktionen die das Casten auf "String" erlauben. Diese würde ich nehmen aber nicht mit (string), da es einfach nicht immer funktioniert.
 
scrollt mal ein bisschen weiter runter (3ter post bei den user notes) bei dem oben genannten link auf der php seite.

da steht ein erklärendes beispiel zu simple xml ;)

und das sich bei unterschiedlichen erweiterungen die operatoren unterschiedlich verhalten können. insofern eine konvertierung auf string und dann vergleichen ist durchaus korrekt und angebracht.
 

Ähnliche Themen

Zurück
Oben