3. php資料型別、資料型別轉換

渲染流星的顏色發表於2019-02-21
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
複製程式碼

相關文章