三 資料型別

2021-10-22 14:31:10 字數 3726 閱讀 7763

資料型別: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...