非基本数据类型
数组类型
定义:表示一系列数据“有序排列”的集合。
下标:在PHP中,数组的下标可以使用整数或字符串(整数下标叫做“索引号”,字符串下标叫做“键名”),在php的报错系统中被叫做“index”或“offset”。(利用下标可获得相应数据包括数组(在多维数组中))
数组遍历:
foreach(数组名 as 下标标量$k =>值变量$v){ //下标变量名和值变量名任意
//循环体
}
对象类型
对象类型在js与PHP中的区别:通常,js中的对象有自定义的,也有“现成”的:window,location;但PHP中的对象,通常是自己纯定义的,纯语法的。举例如下:
资源类型
定义:指对外部数据的引用(非php代码生成的数据,如数据库、文件和图片等)。(PHP只是通过语法来进行操作)
空类型null
计算机编程领域的“概念类型”,只是用来表达变量所存储的数据为空或存储的数据无效的概念的类型
类型转换
自动转换:
弱语言的一个最基本也最方便的一个特征:在各种运算中将非该运算符能处理的数据转换为可以处理的数据。情况如下:
- if(数据){} //转换为bool类型
- 算术运算符 //转换为数字类型
- 连接运算符 //转为字符串类型
- 比较运算符 //转为bool类型或数字类型
- 两边如果有至少一个布尔则另一边转为布尔类型
- 否则,转换为数字进行比较
特别常用的一个转换(不管是自动转换还是强制转换),字符串转换为数字:
"5" => 5//整数
"5.5" => 5.5//浮点数
"5abc" => 5整数
"5.5ab" => 5.5浮点数
"abc5" => 0整数
"abc" => 0整数
"" => 0
强制转换:
通过语法让某一数据转换为另一种类型的数据,语法格式为:(目标类型)数据;
注意:并不能使用该语法将任意类型的数据转换为其他任意类型—有些类型的转换没有意义—系统内部没定义(最常见的发生在基本(标量)数据类型之间)
与类型相关的系统函数
- var_dump():输出一个变量的完整信息
- getType():获取一个变量的类型名称,结果是一个字符串;setType():设置一个变量的类型,语法:settype(变量名,数据类型).
- isset():判断一个变量是否存在;empty():判断一个数据是否为空;unset():销毁一个变量。参考如下表:
- is_XX类型()系列函数:判断某个数据是否是某种类型,包括:is_int(),is_float(),is_string(),is_bool(),is_numeric(),is_scalar()
is_numeric():3,3.5,“3”,“3.5”均判断为true
is_scalar():判断是否为标量类型(int,float,string,bool)
运算符
算术运算符
种类:+、-、*、/、%、++、--
- 1.在PHP中注意取余运算%:先取整,再取余
-
$v1=7.5%3; //结果是1 $v2=7.5%3.5 //结果也是1
2.在js取余不会取整
-
var v1=7.5%3 //结果是1.5 var v2=7.5%3.5 //结果是0.5
自增自减运算符
1.常规:对数字进行自加1或自减1
2.字符串:只能自增,且自增的效果是获得“下一个字符”
3.布尔值递增无效
4.null递增无效且结果为1
前加加和后加加的区别:
- 前++:先完成变量的递增运算,再取得该变量的值参与别的运算
- 后++: 先将原来变量临时存储,再将变量值递增,最后再将临时存储的值参与别的运算。
- 推论1:如果独立语句中进行自加运算,前加与后加没有区别
- 推论2:如果前加后加放在别的语句中会有区别
- 推论3:前加加比后加加效率高
比较运算符
种类:> < >= <= ==(松散比较) != ===(严格比较) !==
==和===的区别
==:松散相等,比较两个数据“类型转换之后”是否可能相等,也可以理解为“数据内容是否相等”
===:严格相等,全等,只有两个数据的类型和数据的内容都完全一致才相等
参考如下:
常见不同类型的比较(主要指标量型数据)
逻辑运算符:&& || !
- 如果有布尔值,转为布尔值比较:规则:true>false
- 否则,如果有数字均转为数字比较:
- 否则,如果两边都是纯数字字符串,转为数字比较
- 否则就按字符串比较,规则:按照字符的先后顺序从高到底比较
前提:针对布尔类型的值进行的运算,不是布尔转化为布尔
逻辑与
规则(真值表):
True&&true =>true
True&&false =>false
false&&true =>false
false&&false =>false
只有两个都是true则为true
逻辑或
规则:
True||true =>true;
True||false =>true
False||true =>true
False||false =>false
只有两个都是false则为false
逻辑非
!true =>false
!false =>true
逻辑与短路
实际应用中,参与逻辑运算的数据,往往都是有关计算之后的布尔值。
If(IsFemale($uName)&&isAge($uName)>18){ //考虑那个放前面(优化型问题)
Echo “”;
}如果IsFeamle()函数判断的结果是false,那么后续的函数就不被调用,此时被称为短路
逻辑或短路
If(IsFemale($uName)||isAge($uName)>18){ //考虑那个放前面
Echo “”;
}此时,如果IsFeamle()函数判断的结果是true,那么后续的函数就不被调用,此时被称为短路
字符串运算符:
一个:"."
衍生:.=
作用:将运算符两边的数据转换为字符串
对比js:+(有双重含义)
赋值运算符
一个:=
衍生:+= -= /= %= .=
基本形式:$变量 复合赋值运算符 数据==》$变量 = $变量 [运算符]数据
条件(三目)运算符
一般的运算符需要2个数据参与,有几个运算符只需要一个数据参与:++ -- !
但是:条件运算符就需要至少三个数据参与
形式:数据1?数据2:数据3
含义:如果数据1为true,则运算结果为数据2,反之为数据3。举例:
$score=66;
$result=$score>60 ? "及格":"不及格";
同样也可以ifelse实现