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 '\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. 进制转换
计算机中支持 十进制、二进制、八进制、十六进制 (逢二、八、十、十六进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
复制代码