2017-09-23 52 views
1

隨着PHP 7我發現,如果我有這樣的功能:整數功能參數自動鑄造

function automatic_int_conversion(int $value) { 
    echo gettype($value) . ' ' . $value; 
} 

,我和一個浮點參數像這樣的稱呼它:

automatic_int_conversion(2.0); # prints out: integer 2 

float(2.0)值被自動轉換爲int,而如果我打電話與float(NAN)的功能是這樣的:

automatic_int_conversion(NAN); # TypeError 

我得到一個類型的錯誤雖然文件說:

由於PHP 7.0.0,而不是被不確定的,依賴於平臺的不同,NaN和無窮,將永遠是零轉換爲整數時。

恕我直言,這是相當混亂和不一致,因爲無論是每個浮動自動轉換或沒有。

我錯過了什麼?

+0

它打印「通知:未定義的變量:X」 https://開頭3v4l。 org/TpvFk,但如果我們更正你的錯誤並刪除你的int cast,它會返回「double 2」https://3v4l.org/Bpv4Y – Andreas

+0

@BenM http://php.net/manual/en/math.constants.php或嘗試'var_dump(NAN);' – zer0uno

+1

@Andreas顯然'$ x'是一個複製n貼紙的錯誤。然而,這裏的要點是自動轉換,如果我刪除了類型提示,那麼就沒有問題了。 – zer0uno

回答

0

類型轉換(顯式)和類型轉換(隱式)之間是有區別的。參數值不會被轉換爲int,而是被強制轉換。您可以將任何值爲int,例如:

echo (int) "a"; // prints 0 

但通過「A」到你的類型聲明的函數拋出一個錯誤,就像路過NAN做:

automatic_int_conversion("a"); // TypeError 

強制只能同投射在非常有限的一組價值觀上。

您可能要啓用嚴格類型禁用強制轉換爲函數的參數,那麼它會工作「預期」:

declare(strict_types=1);