資料型別:data type,在php中指的是儲存的資料本身的型別,而不是變數的型別。php是一種弱型別語言,變數本身沒有資料型別。
在php中將資料分為三大類八小類:
1、簡單(基本)資料型別:4個小類
(1)整型:int/integer,系統分配4個位元組儲存,表示整數型別(前提是能存的下,如果數太大,用double)。
(2)浮點型:float/double,系統分配8個位元組儲存,表示小數或者整型存不下的整數。
(3)字串型別:string,系統根據實際長度分配,表示字串(引號)。
(4)布林型別:bool/boolean,表示布林型別,只有兩個值:true和false
2、復合資料型別:2個小類
(1)物件型別:object,存放物件(物件導向)
(2)陣列型別:array,儲存多個資料(一次性)
3、特殊資料型別:2個小類
(1)資源型別:resource,存放資源資料(php外部資料,如資料庫、檔案)
(2)空型別:null,只有乙個值就是null(不能運算)
型別轉化:在很多的條件下,需要指定的資料型別,需要外部資料(當前php取得的資料),轉換成目標資料型別
在php中有兩種型別轉換方式:
1、自動轉換:系統根據需求自己判定,自己轉換(用的比較多,效率偏低)
2、強制(手動)轉換:認為根據需要的目標型別轉換
強制轉換規則:在變數之前增加乙個括號(),然後在裡面寫上對應型別:int/integer....其中null型別要用unset()函式轉換。
在轉換過程中,用的比較多的就是轉布林型別(判斷)和數值型別(算數運算)
其他型別轉布林型別:true或者false;
其他型別轉數值的說明:
1、以字母開頭的字串,永遠為0
2、以數字開頭的字串,取到碰到字串為止(不會同時包含兩個小數點,第二個小數點會被當成字元)
<?php
$a='abc1.1.1';
$b='1.1.2.abc';
//自動轉換
echo $a+$b;
//強制轉換
echo '
',(float)$a,'
',(float)$b;
?>
通過一組型別判斷函式,來判斷變數,最終返回這個變數所儲存資料的資料型別:是一組以is_開頭後面跟型別名字的函式:is_***(變數名),相同結果返回true,失敗為false。
bool型別不能用echo來檢視,可以使用var_dump結果檢視
//判斷資料型別
echo '';
var_dump(is_int($a));
var_dump(is_string($a));
還有一組函式可以用來獲取以及設定資料(變數)的型別
1、gettype(變數名):獲取型別,得到的是該型別對應的字串
2、settype(變數名,型別):設定資料型別,與強制轉換不同:
(1)強制轉換(型別)變數名,是對資料值複製的內容進行處理(不會處理實際儲存的內容)
(2)settype會直接改變資料本身
儲存整數陣列的型別(有一定的範圍),4個位元組儲存資料,最大就是32位。大概42億多一些,但是在php中預設是有符號型別(區分正負數)所以是±21億多。
在php中提供了四種整型的定義方式:十進位制定義,二進位制定義,八進位制定義和十六進製制定義。輸出預設為十進位制。
//定義四種整型資料
$a = 110; //十進位制
$b = 0b110; //二進位制
$c = 0110; //八進位制
$d = 0x110; //十六進製制
//預設的php輸出是十進位制
echo $a, '~', $b, '~', $c, '~', $d;
1、手動轉換十進位制轉二進位制:除二取餘法
二進位制轉十進位制:從右開始,依次計算乘以2的n次方
2、內建函式轉換
decbin()/bindec():十進位制轉二進位制/二進位制轉十進位制
decoct()/octdec():十進位制轉八進位制/八進位制轉十進位制
dechex()/hexdec():十進位制轉十六進製制/十六進製制轉十進位制
類似的還有很多,都可以互相轉換
浮點型:小數型別以及超過整型所能儲存範圍的整數(不保證精度),精度範圍大概在15個有效數字左右。
$f1 = 1.23;
$f2 = 1.23e10;
$f3 = php_int_max + 1;//整型超過自身儲存的大小之後會用浮點型儲存
var_dump($f1, $f2, $f3);
簡單說明浮點數為什麼同樣的位元組數儲存資料,但是卻能儲存表示更大的資料呢?
00000000 00000000 00000000 00000000->11111111 11111111 11111111 11111111 (整型最大值:所有位都是有效資料)
浮點數:紅色7位算的結果是10的指數,後面三個位元組儲存表示具體數值
00000000 00000000 00000000 00000000->11111111 11111111 1111111 1111111
盡量不用浮點數做精確判斷:浮點數儲存的資料不夠精確,而且在計算機中凡是小數基本上存的都不精確
布林型別:兩個值true和false,通常是用於判斷比較。不區分大小寫。
empty():判斷資料的值是否為「空」,空的意思是空字串,不是null,如果為空返回true,不為空返回false
isset():判斷資料儲存的變數本身是否存在,存在變數返回true,不存在返回false
isset()是判斷變數是否存在;empty()是判斷變數中的值;
個人理解:乙個變數只是宣告,如$a。在php中不指定資料型別,所以只是宣告的話,系統不會給分配記憶體空間,因為系統不知道如何分配(是按照int,還是string,還是其他)。isset()函式就是判斷這個變數有沒有被分配的記憶體空間,is_null()也是判斷該變數有沒有被分配記憶體空間。就算是$x=「」這樣寫,那麼也說明了$x為string字串型別,有了型別,就能分配記憶體空間了。所以就不是null,isset也返回true。
PHP資料型別(三)資料型別轉換原則
一 轉換成字元型的原則 數字將直接轉換成數字字串 布林型true將轉換成字串 1 false將轉換成空字串 null將轉換成空字串 陣列將轉換成字串 array 二 轉換成數值型的原則 如果字串為合法的數字字串,且不包含 或 e 或 e 且不超過整數的最大範圍時,將轉換為整數 否則將轉換為浮點型 例...
redis資料型別(三)
redis支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 string是redis最基本的型別,你可以理解成與memcached一模一樣的型別,乙個key對應乙個value。string型別是二進位制安全的。意思是red...
redis資料型別(三)
redis支援五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 及zset sorted set 有序集合 string是redis最基本的型別,你可以理解成與memcached一模一樣的型別,乙個key對應乙個value。string型別是二進位制安全的。意思是red...