1. 資料型別
變數的資料型別分為強資料型別和弱資料型別。
如果一個變數的型別取決於存放值的型別,這種語言稱為弱資料型別語言。
如果宣告變數是A型別,就不能存放B型別的資料,這種語言稱為強資料型別語言。
PHP和js都是弱資料型別。
a.標量型別
型別 | 描述 |
---|---|
整型integer | 一個沒有小數的數字。 echo PHP_INT_MAX 整型最大值 |
浮點數float | 存放整數和小數 |
布林型boolean | true/false |
字串string | 雙單引號字串 |
浮點數詳解:
由於浮點數轉成二進位制是乘2正向去整,可能會一直迴圈下去。所有浮點數儲存的值是近似值。
不能用浮點數數做比較
var_dump(0.9 == (1-0.1)); //bool(true)
var_dump(0.1==(1-0.9)); //bool(false)
複製程式碼
如果要比較浮點數通過
*bccomp(值1,值2,比較的小數位數)*函式去比較,
如果兩個數相等就返回0,值1>值2返回1,否則返回-1
echo bccomp(0.1,(1-0.9),5),`<br>`; //0
echo bccomp(1.123,1.124,2),`<br>`; //0
echo bccomp(1.123,1.124,3),`<br>`; //-1
複製程式碼
浮點數的範圍比整型要大,
理論上,浮點數的最大值是:1.8E+308,
浮點數的精度有效位數是14位
布林型詳解:
列印布林型使用 var_dump()
字串詳解:
a.1.單引號字串是真正的字串,雙引號字串要將變數進行替換
(單引號字串不需要運算,執行效率高一點)
<?php
$name=`李白`;
echo `名字是$name`; //名字是$name
echo "名字是$name"; //名字是李白
?>
複製程式碼
a.2.大括號和$符可以緊挨著結合使用
<?php
$name=`李白`;
echo `$name是名字<br>`; //$name是名字 換行了
echo "$name是名字<br>"; //報錯雙引號會認為$後面全是變數名
echo "$name 是名字<br>"; //李白 是名字 換行了
echo "($name)是名字<br>"; //(李白)是名字 換行了
echo "{$name}是名字<br>"; //李白是名字 換行了
echo "${name}是名字<br>"; //李白是名字 換行了
?>
複製程式碼
a.3.轉義字元()
將具有特殊含義的字元轉成普通字元
轉義字元後面如果跟的是特殊字元,將特殊字元轉成普通字元。
如果轉義字元後面跟的是普通字元,轉義字元不起作用,就是一個普通字元
echo "呵呵:"哈哈"",`<br>`; //呵呵:"哈哈"
echo "檔案在c:\"; //檔案在c:
echo `12345`; //12345
複製程式碼
但是,要注意轉義字元和r、n、t的組合,
組合表示回車,
表示換行, 表示製表符。
a.4 ASC||
計算機內部使用二進位制計算。鍵盤上的每個字元都有一個編碼和他對應,這個編碼就是ASC||碼。
ASC||碼用7位的二進位制數來表示,可以表示2^7次方個字元(128個)。
- ASC||是連續的。連續的字元之間ASC碼也是連續的。
- 小寫的字母比大寫的大 a>A
- 小寫字母和大寫字母之間相差32 a-A=32
echo ord(`A`),`<br>`; //65 將字元轉成十進位制ASC||碼
echo chr(65),`<br>`; //A 將十進位制的數字轉成字元。
複製程式碼
“”可以轉義ASC碼
echo "101",`<br>`; //A 8進位制ASC碼轉成字元
echo "x41",`<br>`; //A 16進位制ASC碼轉成字元
複製程式碼
a.5 字串定界符
- 作用:為輸出大量的文字並且不用頻繁的轉義提供了簡單方法
- 開始和結束的定界符必須一樣。名字由字元、數字、下劃線組成,不能以數字開頭。
- 開啟識別符號前面有三個小於號“<<<“。
- 結束識別符號必須頂格寫,前面不能有空格和其他字元,識別符號的後面也不能有空格。
echo <<<str //開始定界符
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>PHP</title>
</head>
str; //結束定界符
複製程式碼
<?php
$name = `哈哈`;
echo <<<str
呵呵$name
str;
//輸出 呵呵哈哈
<?php
$name = `哈哈`;
echo <<<`str`
呵呵$name
str;
//輸出 呵呵$name
複製程式碼
b. 複合型別
型別 | 描述 |
---|---|
陣列array | [`llj`,`llk`] |
物件object | {`name`:`llj`} |
b.1. 陣列詳細
定義陣列:
$stu = array(`a`,`b`,`c`,`d`,`e`);
$stu2[] = `tom`;
$stu2[] = `berry`;
複製程式碼
索引陣列:通過下標索引
<?php
$stu = array(`a`,`b`,`c`,`d`,`e`);
echo $stu[0],`<br>`; //a
echo $stu[1],`<br>`;
?>
複製程式碼
關聯陣列:元素的值與字串有某種關聯
<?php
$stu = array(`name`=>`李白`,`sex`=>`男`,`age`=>`21`);
echo $stu[`name`],`<br>`;
echo $stu[`sex`],`<br>`;
echo $stu[`age`],`<br>`;
?>
複製程式碼
鍵值對:陣列的下標可以稱為“鍵”,下標和對應的值稱為“鍵值對”
陣列下標可以修改 1=>`a`
extract()
從陣列中的鍵值對轉成普遍變數
$stu=array(`id`=>1,`name`=>`tom`);
extract($stu);
echo $id,`<br>`,$name;
// 輸出: 1 tom
複製程式碼
a 按照元素的鍵值關係分為:
- 索引陣列:通過元素的位置坐下標。
- 關聯陣列:通過字串做下標,鍵和值存在某種關聯。
- 注意:不能按照鍵的資料型別來判斷是否是索引陣列或關聯陣列,必須看下標和值關聯關係,$stu=array(1=>’tom’,2=>’berry’)也屬於關聯陣列。因為下標不是表示值的位置。
b 按照陣列的結構分
- 一維陣列
- 多維陣列:二維以上
d.特殊型別
型別 | 描述 |
---|---|
資源 | resource |
無 | null |
資源:
- PHP引用的外部資料稱為資源
- 資源只能獲取,不能建立
- 資源也是由類別的,比如連線資源,資料流資源
<?php
$list = mysql_connect(`localhost`,`root`,`adminllj`);
var_dump($list); //resource(3) of type (mysql link)
echo `<br>`;
$fp = fopen(`./.htaccess`,`r`);
var_dump($fp); //resource(5) of type (stream)
?>
複製程式碼
NULL:
- 表示沒有定義的變數
- NULL不區分大小寫。
- 呼叫一個沒有返回值的函式,預設返回NULL
function fun() {}
var_dump(fun());
複製程式碼
2. 進位制轉換
計算機中支援 十進位制、二進位制、八進位制、十六進位制 (逢二、八、十、十六進1)
十六進位制: 0-9,A,B,C,D,E,F (F=15)
例題1:十進位制123,寫出表示式(斜體表示次方)
123 = 1X100 + 2X10 + 3
123 = 1X102+2X101+3X100
例題2:八進位制123,轉成十進位制
123 = 1X82+2X81+3X80
例題3:十六進位制FF,轉成十進位制
FF = 15X161+15X160 = 255
例題4:二進位制1001轉成十進位制
1001 = 23+20 = 9
php進位制轉換方法
進位制 | 函式 | 結果
—|—
十進位制轉成二進位制 | decbin(9) | 1001
二進位制轉成十進位制 | bindec(1001) | 9
十進位制轉成八進位制 | decoct(10) | 12
十進位制轉成十六進位制 | dechex(10) | a
echo decbin(9),`<br>`; //1001
echo bindec(1001),`<br>`; //9
echo decoct(10),`<br>`; //12
echo dechex(10),`<br>`; //a
複製程式碼
3. 資料型別轉換
資料型別是資料在記憶體中儲存的結構,和建立在該資料結構上的操作演算法的集合。
這就意味著不同的資料型別運算操作可能不一樣。不同型別的資料在運算過程中要注意型別的轉換。
a. 自動轉換
運算過程中需要的資料型別和提供的資料型別不一致。
<?php
$num = 10;
if($num){
echo `把數字型轉換成布林型`;
}
echo `<br>`;
echo `10aa` + `20bb`; //30 把字串轉成數字
echo `<br>`;
$num0 = `abc`;
$num1 = 0;
if($num0 == $num1){
echo `把$num0轉換成了數字0`;
}
?>
複製程式碼
b. 強制轉換
語法:(資料型別)資料
示例:
<?php
$num = 10;
var_dump((bool)$num); //bool(true) 轉換成布林
echo `<br>`;
$num0 = 12.5;
echo (int)$num0; //12 浮點數轉成整數
echo `<br>`;
?>
複製程式碼
c. 其他資料型別和bool型之間的轉換規律
- 字串轉換規律:非0非空為true,0或空為false
- 數字轉換規則:0為假,非0為真。
//字串和bool的轉換規律
var_dump((bool)`abcd`); //true
var_dump((bool)``); //false
var_dump((bool)`0`); //false
var_dump((bool)`0.0`); //true
var_dump((bool)`00`); //true
var_dump((bool)`false`); //true
var_dump((bool)`null`); //true
---
//數字和bool的轉換規律
var_dump((bool)1); //true
var_dump((bool)0); //false
var_dump((bool)-10); //true
var_dump((bool)1.1); //true
var_dump((bool)0.0); //false
var_dump((bool)-1.1); //true
---
//陣列和bool的轉換規律
var_dump((bool)array()); //false
var_dump((bool)array(1)); //true
var_dump((bool)array(false));//true
---
//陣列和null的轉換規律
var_dump((bool)null); //false
複製程式碼