如(rú)果一(yī)個 PHP string 可(kě)以被解釋為(wèi) int 或 float 類型,則它被視(shì)為(wèi)數(shù)字字符串。
PHP 8.0.0 正式可(kě)用:
WHITESPACES \s*
LNUM [0-9]+
DNUM ([0-9]*)[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})
INT_NUM_STRING {WHITESPACES} [+-]? {LNUM} {WHITESPACES}
FLOAT_NUM_STRING {WHITESPACES} [+-]? ({DNUM} | {EXPONENT_DNUM}) {WHITESPACES}
NUM_STRING ({INT_NUM_STRING} | {FLOAT_NUM_STRING})
PHP 也有前導數(shù)字字符串的概念。 這(zhè)隻是一(yī)個字符串,其開(kāi)頭類似于數(shù)字字符串,後跟任何字符。
注意:
任何包含字母 E 周圍是數(shù)字的字符串都(dōu)将視(shì)為(wèi)以科學計數(shù)法表示的數(shù)字。這(zhè)會産生意想不到的效果。
<?php
var_dump("0D1" == "000"); // false, "0D1" 不是科學計數(shù)法
var_dump("0E1" == "000"); // true, "0E1" is 0 * (10 ^ 1), or 0
var_dump("2E1" == "020"); // true, "2E1" is 2 * (10 ^ 1), or 20
?>
在數(shù)字上(shàng)下(xià)文中使用的字符串 ¶
當一(yī)個 string 需要(yào)被當作(zuò)一(yī)個數(shù)字計算時(shí),(例如(rú):算術(shù)運算, int 類型聲明(míng)等),則采取以下(xià)步驟來确定結果:
如(rú)果 string 是數(shù)字,當 string 是整數(shù)字符串并且符合 int 類型的範圍限制(即是 PHP_INT_MAX 定義的值),則解析為(wèi) int ,否則解析為(wèi) float 。
如(rú)果上(shàng)下(xià)文允許前導數(shù)字和(hé)一(yī)個 string,如(rú)果 string 的前導部分是整數(shù)數(shù)字字符串且符合 int 類型限制(由 PHP_INT_MAX 定義),則解析為(wèi) int ,否則解析為(wèi) float 。 此外(wài),還會導緻 E_WARNING 級别的錯誤。
如(rú)果 string 不是數(shù)字,則會抛出一(yī)個 TypeError 的異常。
PHP 8.0.0 之前的行(xíng)為(wèi) ¶
在 PHP 8.0.0 之前, 隻有在前導空格的時(shí)候,string 才被認為(wèi)是數(shù)字;如(rú)果它有尾随空格,則該字符串被視(shì)為(wèi)是前導數(shù)字。
在 PHP 8.0.0 之前,當在數(shù)字上(shàng)下(xià)文中使用字符串時(shí),它将執行(xíng)與上(shàng)述相同的步驟,但(dàn)有以下(xià)區(qū)别:
使用前導數(shù)字字符串将導緻 E_NOTICE 而不是 E_WARNING 錯誤。
如(rú)果字符串不是數(shù)字,則會導緻 E_WARNING 錯誤并返回 0 。
在 PHP 7.1.0 之前,則既不會導緻 E_NOTICE,也不會導緻 E_WARNING。
<?php
$foo = 1 + "10.5"; // $foo 是 float (11.5)
$foo = 1 + "-1.3e3"; // $foo 是 float (-1299)
$foo = 1 + "bob-1.3e3"; // PHP 8.0.0 起産生 TypeError;在此之前 $foo 是 integer (1)
$foo = 1 + "bob3"; // PHP 8.0.0 起産生 TypeError;在此之前 $foo 是 integer (1)
$foo = 1 + "10 Small Pigs"; // PHP 8.0.0 起,$foo 是 integer (11),并且産生 E_WARNING;在此之前産生 E_NOTICE
$foo = 4 + "10.2 Little Piggies"; // PHP 8.0.0 起,$foo 是 float (14.2),并且産生 E_WARNING;在此之前産生 E_NOTICE
$foo = "10.0 pigs " + 1; // PHP 8.0.0 起,$foo 是 float (11),并且産生 E_WARNING;在此之前産生 E_NOTICE
$foo = "10.0 pigs " + 1.0; // PHP 8.0.0 起,$foo 是 float (11),并且産生 E_WARNING;在此之前産生 E_NOTICE
?>
網站建設開(kāi)發|APP設計開(kāi)發|小程序建設開(kāi)發