3. php數據類型、數據類型轉換

1. 數據類型

變量的數據類型分爲強數據類型和弱數據類型。 若是一個變量的類型取決於存放值的類型,這種語言稱爲弱數據類型語言。php

若是聲明變量是A類型,就不能存放B類型的數據,這種語言稱爲強數據類型語言。 PHP和js都是弱數據類型。mysql

a.標量類型
類型 描述
整型integer 一個沒有小數的數字。 echo PHP_INT_MAX 整型最大值
浮點數float 存放整數和小數
布爾型boolean true/false
字符串string 雙單引號字符串

浮點數詳解: 因爲浮點數轉成二進制是乘2正向去整,可能會一直循環下去。全部浮點數保存的值是近似值。算法

不能用浮點數數作比較sql

var_dump(0.9 == (1-0.1)); //bool(true) 
var_dump(0.1==(1-0.9)); //bool(false)
複製代碼

若是要比較浮點數經過數組

*bccomp(值1,值2,比較的小數位數)*函數去比較,bash

若是兩個數相等就返回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()ui

字符串詳解:編碼

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 '\1\2\3\4\5';              //\1\2\3\4\5
複製代碼

可是,要注意轉義字符和r、n、t的組合,\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. 進制轉換

計算機中支持 十進制、二進制、八進制、十六進制 (逢2、8、10、十六進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
複製代碼
相關文章
相關標籤/搜索