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
复制代码
相关文章
相关标签/搜索