php語言參考-數(shù)據(jù)類型

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)

微信小程序開發(fā)