文章目录
- 数据类型
- 简单(基本)数据类型:4个小类
- 复合数据类型:2个小类
- 特殊数据类型:2个小类
- 类型转换
- 类型判断
- 整数类型
- 浮点类型
- 布尔类型
- 运算符
- 赋值运算符
- 算术运算符
- 比较运算符
- 逻辑运算符
- 连接运算符
- 错误抑制符
- 三目运算符
- 自操作运算符
- 计算机码
- 位运算
- 运算符优先级问题
数据类型
数据类型:data type,在PHP中指的是存储的数据本身的类型,而不是变量的类型。**PHP是一种弱类型语言,变量本身没有数据类型。**在PHP中将数据分为三大类八小类:
简单(基本)数据类型:4个小类
整型:int/integer,系统分配4个字节存储,表示整数类型(有前提)
浮点型:float/double,系统分配8个字节存储,表示小数或者整型存不下的整数
字符串型:string,系统根据实际长度分配,表示字符串(引号)
布尔类型:bool/boolean,表示布尔类型,只有两个值:true和false
复合数据类型:2个小类
对象类型:object,存放对象(面向对象)
数组类型:array,存储多个数据(一次性)
特殊数据类型:2个小类
资源类型:resource,存放资源数据(PHP外部数据,如数据库、文件)
空类型:NULL,只有一个值就是NULL(不能运算)
类型转换
类型转换:在很多的条件下,需要指定的数据类型,需要外部数据(当前PHP取得的数据),转换成目标数据类型
在PHP中有两种类型转换方式:
1.自动转换:系统根据需求自己判定,自己转换(用的比较多,效率偏低)
2.强制(手动)转换:认为根据需要的目标类型转换
强制转换规则:在变量之前增加一个括号(),然后在里面写上对应类型:int/integer….其中NULL类型用到unset()。在转换过程中,用的比较多的就是
- 转布尔类型(判断)和转数值类型(算术运算)
- 其他类型转布尔类型:true或者false,在PHP中比较少类型换变成false
其他类型转数值的说明
1.布尔true为1,false为0;
2.字符串转数值有自己的规则
2.1 以字母开头的字符串,永远为0;
2.2 以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点)
$a = 'abc1.1.1';
$b = '1.1.1.abc';
echo $a + $b; //自动转化 1.1
echo '<hr/>',(float)$a,'<br/>',(float)$b; #0 1.1
类型判断
通过一组类型判断函数,来判断变量,最终返回这个变量所保存数据的数据类型(相同结果为true,失败为false):是一组以is_开头后面跟类型名字的函数:is_XXX(变量名)
bool类型不能用echo来查看,可以使用var_dump结构查看
- var_dump(变量1,变量2…)
$a = 'abc1.1.1';
$b = '1.1.1.abc';
var_dump(is_int($a)); #bool(false)
var_dump(is_string($b));#bool(true)
还有一组函数可以用来获取以及设定数据(变量)的类型
-
Gettype(变量名):获取类型,得到的是该类型对应的字符串
-
Settype(变量名,类型):设定数据类型:与强制转换不同
- 1.强制转换(类型)变量名,是对数据值复制的内容进行处理(不会处理实际存储的内容)
- 2.settype会直接改变数据本身
$a = 'abc1.1.1';
$b = '1.1.1.abc';
echo gettype($a); #string
var_dump(settype($b,'int')); #bool(true) #settype设置类型成功,返回true
echo gettype($b); #integar
整数类型
整数类型:保存整数数值(范围限制),4个字节存储数据,最大就是32位:2^32 = 42亿多(无符号数)。但是在PHP中默认是有符号类型(区分正负数)
在PHP中提供了四种整型的定义方式:十进制定义,二进制定义,八进制定义和十六进制定义
$a1 = 120; //10进制
$a2 = 0b110; //2进制
$a3 = 0120; //8进制
$a4 = 0x120; //16进制
echo $a1,'<hr/>', $a2,'<hr/>', $a3,'<hr/>', $a4,'<hr/>'; #120 6 80 288
进制转换
十进制:逢10进1,能够出现的数字是0-9
二进制:逢2进1,能够出现的数字是0-1
八进制:逢8进1,能够出现的数字是0-7
十六进制:逢16进1,能够出现的数字是0-9以及a-f,a表示10,依次类推
PHP中不需要用户这么复杂的去计算,提供了很多的函数进行转换 (二进制:bin 八进制:oct 十进制:dec 十六进制:hex )
- decbin():十进制转二进制
- decoct():十进制转八进制
- dechex():十进制转十六进制
- bindec():二进制转十进制
浮点类型
浮点型:小数类型以及超过整型所能存储范围的整数(不保证精度),精度范围大概在15个有效数字左右
浮点型定义有两种方式
-
$f = 1.23;
-
$f = 1.23e10; //科学计数法,其中e表示底10
$f1 = 1.23;
$f2 = 1.23e10;
var_dump($f1,$f2); #float(1.23) float(12300000000)
尽量不用用浮点数做精确判断:浮点数保存的数据不够精确,而且在计算机中凡是小数基本上存的都不准确
$f1 = 0.7;
$f2 = 2.1 / 3;
var_dump($f1 == $f2); #bool(false)
布尔类型
布尔类型:两个值true和false,通常是用于判断比较。在进行某些数据判断的时候,需要特别注意类型转换
- empty():判断数据的值是否为“空”,不是NULL,如果为空返回true,不为空返回false
- isset():判断数据存储的变量本身是否存在,存在变量返回true,不存在返回false
$a;
var_dump(isset($a)); //bool(false)
var_dump(empty($a)); //bool(true)
$x = NULL;
var_dump(isset($x)); //bool(false)
var_dump(empty($x)); //bool(true)
运算符
运算符:operator,是一种将数据进行运算的特殊符号
赋值运算符
赋值运算:符号是“=”,表示将右边的结果(可以是变量、数据、常量和其它运算出来的结果),保存到内存的某个位置,然后将位置的内存地址赋值给左侧的变量(常量)。
算术运算符
算术运算:基本算术操作
- +:执行数据累加
- -:数据相减
- * :键盘上没有乘法符号,使用*代替,两个数相乘
- /:正斜杠代替,表示两个数相除
- %:取余(模)运算,两个数(整数)相除,保留余数
在进行除法运算或者取余运算的时候,对应的除数(第二个数)不能为0
比较运算符
比较运算:比较两个数据的大小,或者两个内容是否相同,返回的结果都是布尔类型:满足返回true,不满足返回false
- >:左边大于右边,返回结果true
- >=:左边大于等于右边
- <:左边小于右边
- <=:左边小于或者等于右边
- ==:左边的与右边的相同(大小相同)
- !=:左边的与右边的不同(大小不同)
- ===:全等于,左边与右边相同:大小以及数据的类型都要相同
- !==:不全等于,只有大小或者类型不同
$a = 123; //整形
$b = '123';//字符串
var_dump($a == $b); #bool(true)
var_dump($a === $b); #bool(false) 大小和类型都要相同
逻辑运算符
逻辑运算:针对不同的结果进行匹配。满足条件返回true,不满足返回false
- &&:逻辑与,左边的条件与右边的条件同时成立(两边结果都为true)
- ||:逻辑或,左边的条件或者右边的条件只要有一个满足即可
- !:逻辑非,对已有条件进行取反,本身为true,取反结果就是false
逻辑与和逻辑或又称之为短路运算:如果第一个表达式结果已经满足条件了,那么就不会运行逻辑运算符后面的表达式
连接运算符
连接运算:是PHP中将多个字符串拼接的一种符号
- 使用
.
可以将两个字符串连接到一起 .=
复合运算,将左边的内容与右边的内容连接起来,然重新赋值给左边变量
例如:A .= B
==> A = A.b
$a = 'hello';
$b = 'Mango';
echo $a.$b; #helloMango
echo '<hr/>';
$a .= $b;
echo $a; #helloMango
错误抑制符
在PHP中有一些错误可以提前预知,但是这些错误可能无法避免,但是又不望报错给用户看,可以使用错误抑制符处理。
@
:在可能出错的表达式前面使用@符号即可。
- 错误抑制符通常在生产环境(上线)会用到,在开发的时候不会用:系统本身最好没有任何错误。
$a = 10;
$b = 0;
@($a / $b); //如果没有错误抑制:报错Warning: Division by zero in D:\apache\htdocs\index.php on line 86
三目运算符
三目运算:有三个表达式参与的运算(简单的的分支结构缩写)
格式:表达式1 ? 表达式2 :表达式3;
- 如果表达式1成立,那么执行表达式2,否则执行表达式3
注意:如果表达式本身比较复杂,建议使用括号包起来
$a = 10;
$b = $a >= 10 ? 20 : 10;
echo $b ; //20
可以得知三目运算符的优先级比赋值运算符高
自操作运算符
后置自操作:先把自己所保存的值留下来,然后改变自己,自己给别人的值是原来的值;
前置自操作:先把自己改变,然后把改变后的值给别人。
$a = 0;
$b = 0;
echo $a++,'<br/>',++$b; // 0 1
echo '<br/>',$a,'<br/>',$b;// 1 1
衍生符号:类似自操作
+=:左边的结果与右边结果相加,然后赋值给左边
-=:左边的减去右边的结果,然后复制给左边
*=:乘法操作
/=:除法操作
%=:模操作
注意:
1.右侧的内容是一个整体
$a = 10;
$b = 5;
$a -= $b-1; //相当于:$a = $a - ($b-1)
echo $a;//6
2.如果进行除法或者取余运算,那么要考虑右边表达式的结果是否为0(为0出错)
计算机码
计算机码:计算机在实际存储数据的时候,采用的二进制编码规则
- 计算机码:原码、反码和补码
- 数值本身最左边一位是用来充当符号位:正数为0,负数为1
位运算
&:按位与,两个位都为1,结果为1,否则为0
|:按位或,两个有一个为1,结果为1
~:按位非,一个位如果为1则变成0,否则反之
^:按位异或,两个相同则为0,不同则为1
<<:按位左移,整个位(32位),向左移动一位,右边补0 (乘以2的操作)
>>:按位右移,整个位向右移动一位,左边补符号位对应内容(正数补0,负数补1) (除以2的操作(不完全正确,因为整数除2会出现小数)
注意:
1.系统进行任何位运算的时候都是使用的补码
2.运算结束之后都必须转换成原码才是最终要显示的数据
运算符优先级问题
运算符优先级:在多种运算符同时存在的时候,如何结合运算