dedlfix: Multiplikation

Beitrag lesen

Hi!

Du hast was anderes in $datensatz->max stehen als angezeigt wird. Lass dir den Inhalt mit var_dump() anzeigen.
object(SimpleXMLElement)#16 (1) { [0]=> string(3) "0.5" }
Wenn dabei eine andere Länge als 3 angezeigt wird, [...]
Es kommt ja 3 dabei heraus von daher!?

Ja und nein. Ich ging davon aus, dass es zwar ein String ist, aber da irgendwas Unsichtbares enthalten ist. Aber als String hättest du nur
  string(3) "0.5"
oder etwas Ähnliches als Ausgabe von var_dump() bekommen. Du bekommst aber ein Objekt. Das Rätsel löst sich durch die Kontrollausgabe, weil nun herauskommt, dass SimpleXML seine Finger im Spiel hat. Dies hat eine Menge eingebaute Magie, die in manchen Situationen beispielsweise ein SimpleXMLElement wie ein String und manchmal wie ein Array aussehen lässt. Und da hilft dir die schon empfohlene Typumwandlung. Hier ein Beispiel zum Nachvollziehen:

echo '<pre>';
$x = simplexml_load_string('<root>0.5</root>');
var_dump($x); # Ausgabe ähnlich wie bei dir

Ausgabe: 0.5 - PHP erkennt Stringkontext und ruft __toString() vom SimpleXMLElement auf.

echo $x, "\n";

Ausgabe: float(0.5) - da es kein __toFloat() gibt, nehme ich an,

dass __toString() aufgerufen wird und anschließend der Typecast nach float stattfindet.

var_dump((float)$x);

Ausgabe 12

echo (float)$x * 24;

Lo!