如果一個 PHP string 可以被解釋爲 int 或 float 類型,則它被視(shì)爲數字字符串。
PHP 8.0.0 正式可用(yòng):
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 也(yě)有前導數字字符串的概念。 這(zhè)隻是一個字符串,其開(kāi)頭類似于數字字符串,後跟任何字符。
注意:
任何包含字母 E 周圍是數字的字符串都将視(shì)爲以科學計(jì)數法表示的數字。這(zhè)會(huì)産生意想不到(dào)的效果。
<?php
var_dump("0D1" == "000"); // false, "0D1" 不是科學計(jì)數法
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àng)下(xià)文(wén)中使用(yòng)的字符串 ¶
當一個 string 需要被當作(zuò)一個數字計(jì)算(suàn)時(shí),(例如:算(suàn)術運算(suàn), int 類型聲明(míng)等),則采取以下(xià)步驟來(lái)确定結果:
如果 string 是數字,當 string 是整數字符串并且符合 int 類型的範圍限制(即是 PHP_INT_MAX 定義的值),則解析爲 int ,否則解析爲 float 。
如果上(shàng)下(xià)文(wén)允許前導數字和(hé)一個 string,如果 string 的前導部分是整數數字字符串且符合 int 類型限制(由 PHP_INT_MAX 定義),則解析爲 int ,否則解析爲 float 。 此外(wài),還會(huì)導緻 E_WARNING 級别的錯誤。
如果 string 不是數字,則會(huì)抛出一個 TypeError 的異常。
PHP 8.0.0 之前的行爲 ¶
在 PHP 8.0.0 之前, 隻有在前導空(kōng)格的時(shí)候,string 才被認爲是數字;如果它有尾随空(kōng)格,則該字符串被視(shì)爲是前導數字。
在 PHP 8.0.0 之前,當在數字上(shàng)下(xià)文(wén)中使用(yòng)字符串時(shí),它将執行與上(shàng)述相同的步驟,但(dàn)有以下(xià)區(qū)别:
使用(yòng)前導數字字符串将導緻 E_NOTICE 而不是 E_WARNING 錯誤。
如果字符串不是數字,則會(huì)導緻 E_WARNING 錯誤并返回 0 。
在 PHP 7.1.0 之前,則既不會(huì)導緻 E_NOTICE,也(yě)不會(huì)導緻 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
?>
網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發