Sto creando un oggetto (chiamiamolo Decimal
) in PHP che avvolge la funzionalità bcmath e aggiunge alcune nuove funzionalità.Perché non posso lanciare un oggetto su un float in PHP?
La maggior parte del lavoro effettivo si verifica in funzioni statiche come add(...)
e divide(...)
. Gli unici metodi di istanza sono i metodi accessor (hooray per immutability!) E il metodo magico __toString()
.
__toString
funziona per la maggior parte dei casi, ma c'è l'istanza dispari che voglio il mio tipo cast in un float/double/real. Potrei farlo con un metodo di istanza o facendo un cast (float)(string)
, ma sembra logico che ci dovrebbe essere un metodo magico simile per fare questo, come un __toFloat
. Sfortunatamente, non sembra che ci sia. Non riesco a trovare alcuna documentazione in tal senso. Ho provato a farlo come __toFloat
o __toDouble
, sperando che fosse solo una funzionalità non documentata, senza risultato.
Sarei persino felice se lo floatval()
tentasse automaticamente di trasmettere il suo argomento a una stringa, ma non lo fa. Genera un errore Notice: Object of class Decimal could not be converted to double
.
C'è un modo migliore o una soluzione per questo?
Domanda interessante, ma puoi delineare perché un metodo di istanza non sarebbe appropriato? – halfer
Non sto dicendo che sia una soluzione inappropriata. Penso solo che sia strano che ci sia solo un metodo magico per gestire il cast in stringa e non tutti i tipi di base. Porta a richiedere interfacce diverse per ottenere sostanzialmente lo stesso effetto. – DynamiteReed
Se vuoi sovraccaricare cast o operatori, dovrai scrivere un'estensione PHP. Questa funzionalità non è fornita nel codice userland. – NikiC