本文主要和大家分享PHP變數類型詳細介紹,屬於基礎分享,希望能幫助大家。
PHP支援9種原始資料類型。
4種標量類型:
#boolean
布林型
integer
整形
float
浮點型(也稱為double
)
#string
字串
3種複合型別:
array
數組
object
物件
callable
可呼叫
2種特殊型別
#resource
資源
###null### 無型別###############為了確保程式碼的易讀性,我們通常會使用一些偽類型:#######
mixed
混合类型
number
数字类型
callback
回调类型(又称为callable
)
array|object
数组|对象类型
void
无类型
变量的类型不是程序员设定,是由PHP根据该变量使用的上下文在运行时决定的。
与变量类型有关的常用函数
如果想查看某个表达式的值和类型,使用var_dump()
函数。
获取变量的类型,使用gettype()
函数。
要检验某个类型,可以使用is_type函数,如:
<?php $a = 1; if(is_int($a)){ echo "\r\n\$a是在整形\r\n"; } if(is_float($a)){ echo "\r\n\$a是在浮点型\r\n"; } if(is_string($a)){ echo "\r\n\$a是在字符串\r\n"; } ...... ?>
如果需要将一个变量强制转换为某类型,可以对其使用强制转换或者settype()
函数。
这是最简单的类型。boolean
表达了真值,可以为TRUE
或 FALSE
要指定一个布尔值,使用常量TRUE
或 FALSE
。(不区分大小写)如:
<?php $bool = TRUE; // 设置$bool 为 TRUE?>
通常运算符所返回的boolean
值结果会被传递给控制流程。
要明确的将一个值转换成boolean
,用(bool)
或者(boolean)
来强制转换,但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个 boolean
参数时,该值会被自动转换。
當轉換為boolean 時,以下值被認為是FALSE:
#布林值FALSE
本身
整數值0
浮點型0.0
空字串,以及字串"0"
不包含任何元素的陣列
特殊型別NULL
(包含尚未賦值的變數)
從空標記產生的SimpleXML物件
所有其它值都被認為是TRUE
(包括任何資源和NAN
)。
integer 是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的某個數。
整數值可以使用十進制,十六進制,八進位或二進位表示,前面可以加上可選的符號(- 或 +)。
要使用八進位表達,數字前必須加上 0
(零)。要使用十六進位表達,數字前必須加上 0x
。要使用二元表達,數字前必須加上 0b
。
<?php $a = 1234; // 十进制数 $a = -123; // 负数 $a = 0123; // 八进制数 (等于十进制 83) $a = 0x1A; // 十六进制数 (等于十进制 26) $a = 0b11111111; // 二进制数字 (等于十进制 255)?>
整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64 位平台下的最大值通常是大约 9E18,除了 Windows 下 PHP 7 以前的版本,总是 32 位的。 PHP 不支持无符号的 integer。Integer 值的字长可以用常量 PHP_INT_SIZE
来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量 PHP_INT_MAX
来表示,最小值可以在 PHP 7.0.0 及以后的版本中用常量 PHP_INT_MIN
表示。
如果给定的一个数超出了 integer
的范围,将会被解释为 float
。同样如果执行的运算结果超出了 integer
范围,也会返回 float
。
PHP 中没有整除的运算符。1/2 产生出 float 0.5。 值可以舍弃小数部分,强制转换为 integer
,或者使用 round()
函数可以更好地进行四舍五入。
要明确地将一个值转换为 integer
,用 (int)
或 (integer)
强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer
参数时,值会自动转换。还可以通过函数 intval()
来将一个值转换成整型。
思考下以下两种流程控制的区别:
<?php $num = '1'; if(1 == $num){ # code ... } if($num == 1){ # code ... }?>
将 resource
转换成 integer
时, 结果会是 PHP 运行时为 resource
分配的唯一资源号。
当从浮点数转换成整数时,将向下取整。
如果浮点数超出了整数范围(32 位平台下通常为 +/- 2.15e+9 = 2^31
,64 位平台下,除了 Windows,通常为 +/- 9.22e+18 = 2^63
),则结果为未定义,因为没有足够的精度给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!
PHP 7.0.0 起,NaN
和 Infinity
在转换成 integer
时,不再是 undefined
或者依赖于平台,而是都会变成零。
绝不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。
<?php echo (int) ( (0.1+0.7) * 10 ); // 显示 7!?>
浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义:
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10;?>
浮点数的字长和平台相关,尽管通常最大值是 1.8e308 并具有 14 位十进制数字的精度(64 位 IEEE 格式)
浮點數的精確度有限。儘管取決於系統,PHP 通常使用 IEEE 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e-16。非基本數學運算可能會給出更大誤差,並且要考慮到進行複合運算時的誤差傳遞。
此外,以十進制能夠精確表示的有理數如0.1 或0.7,無論有多少尾數都不能被內部所使用的二進制精確表示,因此不能在不丟失一點點精度的情況下轉換為二進制的格式。這就會造成混亂的結果:例如,floor((0.1+0.7)*10) 通常會回傳 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9999999999999991118...。
所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。如果確實需要更高的精度,應該使用任意精度數學函數或 gmp 函數。
如上述警告訊息所言,由於內部表達方式的原因,比較兩個浮點數是否相等是有問題的。不過還是有迂迴的方法來比較浮點數值的。
要測試浮點數是否相等,要使用一個只比該數值大一丁點的最小誤差值。該值也稱為機器極小值(epsilon)或最小單元取整數,是計算中所能接受的最小的差異值。
$a 和 $b 在小數點後五位精確度內都是相等的。
<?php $a = 1.23456789; $b = 1.23456780; $epsilon = 0.00001; if(abs($a-$b) < $epsilon) { echo "true"; }?>
某些数学运算会产生一个由常量 NAN
(not a number) 所代表的结果。此结果代表着一个在浮点数运算中未定义或不可表述的值。任何拿此值与其它任何值(除了 TRUE
)进行的松散或严格比较的结果都是 FALSE
。
由于 NAN
代表着任何不同值,不应拿 NAN
去和其它值进行比较,包括其自身,应该用 is_nan()
来检查。
一个字符串 string
就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode
。
分析一下:
1 Byte = 8 bit 由于1个字节存储一个字符,那么1字节所能存储字符的可能性为:2^8=256
一个字符串可以用 4 种方式表达:
單引號
雙引號
#heredoc 語法結構
nowdoc 語法結構
定義一個字串的最簡單的方法是用單引號把它包圍起來(字元')。
要表達一個單引號自身,需在它的前面加個反斜線()來轉義。要表達一個反斜線自身,則用兩個反斜線(\)。其它任何方式的反斜線都會被當成反斜線本身:也就是說如果想使用其它轉義序列例如 r 或 n,並不代表任何特殊含義,就單純是這兩個字符本身。
不像雙引號和 heredoc 語法結構,在單引號字串中的變數和特殊字元的轉義序列將不會被取代。
果實字串是包圍在雙引號(")中, PHP 將對一些特殊的字元進行解析:
序列 | 意義 |
---|---|
#n | 換行(ASCII 字元集中的LF 或0x0A (10)) |
r | #回車(ASCII 字元集中的CR 或0x0D (13)) |
#t | 水平製表符(ASCII 字元集中的HT 或0x09 (9)) |
v | 垂直製表符( ASCII 字元集中的VT 或0x0B (11))(自PHP 5.2.5 起) |
e | Escape(ASCII 字元集中的ESC 或0x1B (27)) (自PHP 5.4.0 起) |
f | 換頁(ASCII 字元集中的FF 或0x0C (12))(自PHP 5.2.5 起) |
\ | 反斜線 |
#$ | 美元標記 |
" | 雙引號 |
[0-7]{1,3} | 符合該正規表示式序列的是一個以八進位方式來表示的字元 |
x[0-9A-Fa-f]{1,2} | 符合該正規表示式序列的是一個以十六進位方式來表達的字元 |
和單引號字串一樣,轉義任何其它字元都會導致反斜線被顯示出來。
用雙引號定義的字串最重要的特徵是變數會被解析。
第三種表達字串的方法是用 heredoc 句法結構:1e802389325cfc7aea74f37fae16751d 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。
一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<
, 但是跟在后面的标识符要用单引号括起来,即 <<<'EOT'
。Heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。本文由北大青鸟学校开发小组提供。
相关推荐:
以上是PHP變數類型詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!