[英]Can PHP's (float) casting ever return a non-float value?
我正在調試一些代碼,之前的開發人員寫道:
if (!is_float((float)$value)) {
throw new \Exception();
}
在下表中, R
是將具有指定TYPE
的VALUE
轉換為(float)
。 x
表示這里可能有不同的值。
R TYPE VALUE
- ---- -----
0 null
0 bool false
1 bool true
x int x
x float x
0 string 'invalid'
x string 'x'
0 array []
1 array [x]
1 object x (raises a notice)
x resource handle (unintuitive)
我找不到任何無法轉換為(float)
。 是否有可能拋出上述\\Exception
?
PHP 文檔說:
轉換為浮動
有關將字符串轉換為浮點數的信息,請參閱字符串轉換為數字。 對於其他類型的值,通過先將值轉換為 integer 再轉換為 float 來執行轉換。 有關更多信息,請參閱轉換為整數。 從 PHP 5 開始,如果對象被轉換為浮點數,則會拋出一個通知。
(強調我的)
所以據我所知,上面的\\Exception
是無法訪問的代碼。 這是正確的還是其他開發人員知道我不知道的事情?
這目前是不可能的。
然而,這可能會改變。
原因是從數組和(非字符串)對象轉換為整數在技術上是未定義的行為,請參閱有關轉換為整數的文檔。 https://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting
由於數組和對象目前在嘗試轉換為整數時不會拋出任何類型錯誤,這意味着始終存在整數表示。
因為整數總是可以用浮點數表示(如果它太大,它甚至可能溢出到浮點數)。 此檢查(當前)始終為假。
(旁注:資源句柄的浮點轉換只是 PHP 分配給該資源的資源句柄號。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.