2014-04-18 28 views
5

我在PHP中創建了一個對象(我們稱之爲Decimal),它包裝了bcmath功能並添加了一些新功能。爲什麼我不能將對象轉換爲PHP中的浮點數?

大部分實際工作都發生在像add(...)divide(...)這樣的靜態函數中。唯一的實例方法是訪問器方法(用於不變性的萬歲!)和魔法方法。

__toString適用於大多數情況,但有奇怪的實例,我想我喜歡的類型強制轉換成浮點/雙/實。我可以用一個實例方法或者通過執行一個(float)(string)強制轉換來完成此操作,但似乎符合邏輯的是應該有類似的方法來執行此操作,例如__toFloat。不幸的是,它似乎並不存在。我無法找到任何有關文件。我試着把它作爲__toFloat__toDouble,希望它可能只是一個無證的功能,無濟於事。

我甚至會很高興,如果floatval()自動試圖將其參數轉換爲字符串,但事實並非如此。它會拋出一個Notice: Object of class Decimal could not be converted to double錯誤。

是否有更好的方法或爲此周圍的工作?

+0

有趣的問題,但你能概述爲什麼實例方法不合適? – halfer

+0

我並不是說這是一個不合適的解決方案。我只覺得奇怪的是,只有一種神奇的方法來處理投射到字符串而不是所有的基本類型。它導致需要不同的接口才能達到基本相同的效果。 – DynamiteReed

+4

如果你想重載轉換或操作符,你必須編寫一個PHP擴展。此功能不提供給用戶級代碼。 – NikiC

回答

-2

你有沒有嘗試使用您的皈依低於以下?

<?php 
$str = <<<EOD 
Example of string 
spanning multiple lines 
using heredoc syntax. 
EOD; 


class foo 
{ 
var $foo; 
var $bar; 

function foo() 
{ 
    $this->foo = 'Foo'; 
    $this->bar = array('Bar1', 'Bar2', 'Bar3'); 
} 
} 

$foo = new foo(); 
$name = 'MyName'; 

echo <<<EOT 
My name is "$name". I am printing some $foo->foo. 
Now, I am printing some {$foo->bar[1]}. 
This should print a capital 'A': \x41 
EOT; 
?> 
+2

同你甚至看這個問題? – Hirnhamster

1

通常,toString()方法返回一個對象的字符串表示,以使其適合顯示 - 認爲調試,錯誤消息等

要返回的對象可以簡單地使值一種getValue()方法。

而且我的意見並不用靜態方法。試試這個:

$numberOne = new Number(5); 
$numberTwo = new Number(10); 

$numberOne->add($numberTwo); 

$sum = $numberOne->getValue();// 15 
相關問題