做(zuò)自(zì)由與創造的先行(xíng)者

數(shù)字字符串

PHP中文手冊

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