2012-07-25 88 views
1

我有一種情況,我在PHP函數中使用某些算術(主要是乘法/除法)的變量。變量實際上是從另一個傳遞給函數的。但是,通過的內容可能是數值或字符串值。PHP在算術中使用字符串

所以基本上我有:

$inverse = 1/$number; 

$number可以是一個有效的數字,或者一個字符串。

我的問題是$number是字符串時會發生什麼? PHP如何處理這種情況?

最終答案並不太重要;我可以想到解決這種情況的幾種不同的方法。這只是它出現了,我很好奇,並且快速的谷歌搜索無法回答我的問題。即使我不需要知道答案,我也想知道答案,因爲了解PHP如何工作將在未來幫助我。

謝謝。

回答

3

PHP將執行類型強制(也稱爲type-juggling),並嘗試將該值解釋爲數字,當它是一個字符串時,該變量在數字上下文中使用。

參見the docs上除法運算符:

除法運算符(「/」),除非兩個 操作數(即得到轉換爲整數或字符串)的整數返回float值和 數字是均勻分割,在這種情況下,將返回一個整數值 。

另外相關,String conversions to a number

當一個字符串在數值上下文中計算,將得到的值 和類型被確定如下。

....

該值由字符串的起始部分給出。如果字符串 以有效數字數據開頭,則這將是使用的值。 否則,該值將爲0(零)。有效的數字數據是一個可選符號 ,後跟一個或多個數字(可選包含小數點 ),後跟可選的指數。指數是 'e'或'E'後跟一個或多個數字。

1

PHP以靜默方式將字符串轉換爲浮點數。

1

它將採取字符串,並將分析它的aritmetic值: 例如"1bottle"將成爲1。一般規則是字符串第一部分內的每個數字字符都轉換爲浮點數。所以12.3bottle = 12.3,.3alonin = 0.3等等。如果沒有第一個數字字符,那麼值將爲0.

這叫做type juggling

+0

但是,1e3將轉換爲1000. PHP非常棘手。 – Antimony 2012-07-25 23:51:23

+0

確實12.3看起來對你? – 2012-07-25 23:56:00

+0

@ KarolyHorvath,對不起,修正。 – Shoe 2012-07-26 00:04:23