做自(zì)由與創造的先行者

數字字符串

PHP中文(wén)手冊

如果一個 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)發
下(xià)一篇:Array 數組
上(shàng)一篇:String 字符串