1.類型介紹:
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站設(shè)計、網(wǎng)站制作和成都服務(wù)器托管的網(wǎng)絡(luò)公司,有著豐富的建站經(jīng)驗和案例。
php支持8種原始類型
四種標(biāo)量類型
。布爾型boolean
?!痢痢粒╥nteger)
。浮點型(float)(浮點數(shù),也做double)
。字符串(string)
兩種復(fù)合類型
。數(shù)組(array)
。對象(object)
最后是兩種特殊類型
。資源(resource)
。null
為了確保代碼的易讀性,本手冊還介紹了一些偽類型
?;旌希╩ixed)
。數(shù)字(number)
?;仞仯╟allback)
你可能還會讀到一些關(guān)于雙精度double類型的參考。實際上double和float是相同的,由于一些歷史原因這兩個名詞同時存在
變量的類型通常不是由程序員設(shè)定的,確切的說是有php根據(jù)該變量使用的上線問運(yùn)行時決定的
注:如果你想查看某個表達(dá)式的值和類型,用var_dump()。
注:如果你只想看到一個以讀懂的類型的表達(dá)方式用于調(diào)試,用gettype().要查看某個類型,不要用gettype(),而用is_type()函數(shù),以下是一些范例:
<?php $bool=TRUE;//a boolean $str="foo";//a string $int=12;//an integer echo gettype($bool);//prints out "boolean" echo gettype($str);//print out "string" //If this is an integer, increment it by four if(is_int($int)) { $int+=4; } //If $bool is a string,print it out //(does not print out anything) if(is_string($bool)) { echo "String:$bool"; } ?>
如果你要將一個變量強(qiáng)制轉(zhuǎn)換成某類型,可以對其使用強(qiáng)制轉(zhuǎn)換或者settype()函數(shù)。
注意變量很據(jù)當(dāng)時的類型在特定場合下會表現(xiàn)出不同的值。更多類型件類型戲法。此外你還可以參考 php類型比較表 看不同類型相互比較的例子。
2。布爾型
這是最簡單的類型。boolean 表達(dá)了真值??梢詾閠rue或者false
注:布爾類型是php4引進(jìn)的
語法
要制定一個布爾值,使用關(guān)鍵字true或者false,兩個都是大小寫不敏感的
<?php
$foo=True;//assign the value TRUE to $foo
?>
通常你用某些運(yùn)算符返回boolean值,并將其傳遞給流程控制
//==is an operator which test //equality and returns a boolean if($action=="show_version"){ echo "The version is 1.23"; } //this is not necessary... if($show+separators==true){ echo "<hr>\n"; } //...because you can simply type if($show_separators){ echo "<hr>\n"; }
轉(zhuǎn)換成布爾值
要明示地將一個值轉(zhuǎn)換成boolean,用bool或者boolean來強(qiáng)制轉(zhuǎn)換。但是很多情況下不需要強(qiáng)制轉(zhuǎn)換,因為當(dāng)運(yùn)算符,函數(shù)或者流程控制需要一個boolean參數(shù)時,該值會被自動轉(zhuǎn)換。
參見類型戲法
當(dāng)轉(zhuǎn)換成boolean時,以下值被認(rèn)為是false
。布爾值false
。整型值 0(零)
。浮點型值0.0(零)
??瞻鬃址妥址?”
。沒有成員變量的數(shù)組
。沒有單元的對象
。特殊類型null(包括尚未定義的變量)
所有其他值都被認(rèn)為是true(包括任何資源)
警告:
-1和其他非零值(不論正負(fù))一樣,被認(rèn)為是true
<?php echo gettype((bool)"");//bool(false) echo gettype((bool)1);//bool(true) echo gettype((bool)-2);//bool(true) echo gettyope((bool)"foo");//bool(true) echo gettype((bool)2.3e5);//bool(true) echo gettype((bool)array(12));//bool(true) echo gettype((bool)array());//bool(false) ?>
3.×××
一個integer是集合Z={...,-2,-1,0,1,2,...}中的一個數(shù)。
參見任意長度證書/GMP,浮點數(shù) 和任意精度數(shù)學(xué)庫/BCMath
語法
整型值可以用10進(jìn)制,16進(jìn)制或8進(jìn)制符號指定,前面可以加上可選的符號(—或者+)
如果用8進(jìn)制符號,數(shù)字前必須加上0,用16進(jìn)制符號數(shù)字前必須加上0x
例子 6-1 整數(shù)文字表達(dá)
<?php
$a=1234;#10進(jìn)制數(shù)
$a=-123;#10進(jìn)制數(shù)
$a=0123;#八進(jìn)制數(shù)(等于10進(jìn)制的83)
?>
在字面上,×××變量正式的結(jié)構(gòu)可以為:
<?php decimal :[1-9][0-9]* |0 hexadecimal:0[xX][0-9a-fA-F]+ octal :0[0-7]+ integer :[+-]?decimal |[+-]?hexadecimal |[+-]?octal ?>
×××的字長和平臺有關(guān),盡管通常最大值是大約20億(32位有符號),php不支持無符號整數(shù)
整數(shù)溢出
如果你指定了一個數(shù)超出了integer的范圍,竟會被解釋為float.同樣如果你執(zhí)行的運(yùn)算結(jié)果超出了integer范圍,也會返回float
<?php $large_number=2147483647; var_dump($large_number); //輸出為:int(2147483647) $large_number=2147483648; var_dump($large_number); //輸出為:float(2147483648) //同樣也適用于16進(jìn)制的表示的整數(shù) var_dump(0x80000000); //輸出為:float(2147483648) $million=1000000; $large_number=50000*$nillion; var_dump($larger_number); //輸出為:float(50000000000) ?>
警告:
不幸的是php中有個bug,因此當(dāng)有負(fù)數(shù)參與結(jié)果是并不總是正確。
例如當(dāng)運(yùn)算-50000*¥million是結(jié)果是-429496728.不過當(dāng)兩個運(yùn)算數(shù)都是正數(shù)時就沒有問題
這個問題在php4.1.0中解決了
php中沒有整出的運(yùn)算符。1/2產(chǎn)生浮點數(shù)0.5.您可以總是舍棄小數(shù)部分,或者使用round()函數(shù)
<?php var_dump(25/7);//float(3.5714285714286) var_dump((int)(25/7));//int(3) var_dump(round(25/7));float(4) ?>
轉(zhuǎn)換為×××
要明示地將一個值轉(zhuǎn)換為integer,用(int)或(integer)強(qiáng)制轉(zhuǎn)換。
不過大多數(shù)情況下都不需要強(qiáng)制轉(zhuǎn)換。因為當(dāng)運(yùn)算符,函數(shù),或者流程控制需要一個integer參數(shù)時值會自動轉(zhuǎn)換
。您還可以通過函數(shù)intval()來將一個值轉(zhuǎn)換成×××
從布爾值轉(zhuǎn)換
false將產(chǎn)生0(零),true將產(chǎn)生1(壹)
從浮點數(shù)轉(zhuǎn)換
當(dāng)從浮點數(shù)轉(zhuǎn)換成正數(shù)時,數(shù)字將被取整(丟棄小數(shù)位)
如果浮點數(shù)超出了整數(shù)范圍(通常為+/- 2.15e+9=2^31),則結(jié)果不確定
,因為沒有足夠的精度使浮點數(shù)給出一個確切的整數(shù)結(jié)果。在此情況下沒有警告,甚至沒有任何通知!
譯者注:在linux下返回的結(jié)果是最小負(fù)數(shù)(-2147483648),而在windows下返回的結(jié)果是0
警告:
絕不要將未知的分?jǐn)?shù)強(qiáng)制轉(zhuǎn)換為integer,這樣有時會導(dǎo)致意外的結(jié)果
<?php
echo (int)((0.1+0.7)*10);//顯示7!
?>
從字符串轉(zhuǎn)換
注意:
沒有定義從其他類型轉(zhuǎn)換為×××的行為。目前的行為和值先轉(zhuǎn)換為布爾值一樣。不過不要依靠此行為,因為它會未加通知的改變。
4.浮點型
浮點數(shù)(也叫“float”,"doubles"或“real numbers”)可以用以下任何語法定義
<?php
$a=1.234;
$a=1.2e3;
$a=7E-10;
?>
形式上:
LNUM [0-9]+ DNUM ([0-9]*[\.]{LNUM})|({LNUM}[\.][0-9]*) EXPONENT_DNUM(({LNUM}|{DNUM})[eE][+-]?{LNUM})
浮點數(shù)的字長和平臺相關(guān),盡管通常最大值是1.8e308并具有14位十進(jìn)制數(shù)字的精度(64位IEEE格式)
浮點數(shù)精度
顯然簡單的十進(jìn)制分?jǐn)?shù)如同0.1或0.7不能在不丟失一點點精度的情況下轉(zhuǎn)換為內(nèi)部二進(jìn)制的格式,這樣會造成混亂的結(jié)果:例如floor((0.1+0.7)*10)通常會返回7而不是預(yù)期中的8,因為該結(jié)果內(nèi)部的表示其實是類似7.9999999.。。。
這和一個事實有關(guān),那就是那就是不可能用精確的用有限位數(shù)表達(dá)十進(jìn)制分?jǐn)?shù)。例如十進(jìn)制1/3變成了0.3333333.
所以永遠(yuǎn)不要相信浮點數(shù)結(jié)果精確到了最后一位,也永遠(yuǎn)不要比較兩個浮點數(shù)是否相等。如果確實需要更高的精度,應(yīng)該使用任意精度數(shù)學(xué)函數(shù)庫gmp函數(shù)庫
轉(zhuǎn)換為浮點數(shù):
如果您洗完了解有關(guān)何時和如何將字符串轉(zhuǎn)換成浮點數(shù)的信息,請查閱標(biāo)題為“將字符串轉(zhuǎn)換為數(shù)字”的有關(guān)章節(jié)。對于其他類型的值,其情況類似于先將值轉(zhuǎn)換為×××,然后再轉(zhuǎn)換成浮點。
5.字符串
string是一系列字符。在php中,字符和字節(jié)一樣,也就是說,一共有256種不同字符的可能性。這也暗示,php和unicode沒有本地支持。請參閱utf8_encode和utf8_decode
當(dāng)前名稱:php語言參考-數(shù)據(jù)類型
路徑分享:http://www.muchs.cn/article32/jpjepc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、ChatGPT、移動網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、微信小程序、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)