Ich erstelle ein Objekt (nennen wir es Decimal
) in PHP, das die bcmath-Funktionalität umschließt und einige neue Funktionen hinzufügt.Warum kann ich kein Objekt in PHP in ein Float-Objekt umwandeln?
Die meisten der tatsächlichen Arbeit tritt in statischen Funktionen wie add(...)
und divide(...)
. Die einzigen Instanz-Methoden sind Accessor-Methoden (horay for immutability!) Und die __toString()
magische Methode.
__toString
funktioniert in den meisten Fällen, aber es gibt die seltsame Instanz, dass ich möchte, dass mein Typ in ein float/double/real umgewandelt wird. Ich könnte das mit einer Instanzmethode machen oder indem ich eine (float)(string)
Umwandlung mache, aber es scheint logisch, dass es eine ähnliche magische Methode dafür geben sollte, wie eine __toFloat
. Leider scheint es nicht so zu sein. Ich kann keine Dokumentation zu diesem Zweck finden. Ich versuchte es einfach als __toFloat
oder __toDouble
, in der Hoffnung, dass es vielleicht nur eine undokumentierte Funktionalität war, ohne Erfolg.
Ich wäre sogar glücklich, wenn floatval()
automatisch versucht, sein Argument auf eine Zeichenfolge zu werfen, aber es tut es nicht. Es wirft einen Fehler Notice: Object of class Decimal could not be converted to double
.
Gibt es einen besseren Weg oder eine Arbeit dafür?
Interessante Frage, aber können Sie skizzieren, warum eine Instanzmethode nicht angemessen wäre? – halfer
Ich sage nicht, dass es eine unangemessene Lösung ist. Ich denke nur, dass es merkwürdig ist, dass es nur eine magische Methode geben würde, um mit String zu stringeln und nicht alle Grundtypen. Es führt dazu, dass unterschiedliche Schnittstellen erforderlich sind, um im Wesentlichen den gleichen Effekt zu erzielen. – DynamiteReed
Wenn Sie Casts oder Operatoren überladen möchten, müssen Sie eine PHP-Erweiterung schreiben. Diese Funktionalität wird dem Benutzerlandcode nicht zur Verfügung gestellt. – NikiC