簡體   English   中英

PHP 的(浮點)轉換可以返回非浮點值嗎?

[英]Can PHP's (float) casting ever return a non-float value?

我正在調試一些代碼,之前的開發人員寫道:

if (!is_float((float)$value)) {
  throw new \Exception();
}

在下表中, R是將具有指定TYPEVALUE轉換為(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM