php类型的相关函数,运算符,条件判断,循环
类型的相关函数
函数的原型 :函数返回值类型 函数名(参数1类型 参数1,参数2类型 参数2……)
1, 任何一个函数,都要考虑它是否有返回值以及该返回值的类型,如果该函数没有返回值,就用void来表示!
2, 如果函数参数的类型或者函数返回值的类型有很多个,就用mixed来代替,意思就是混合类型,也叫作“伪类型”
gettype string gettype ( mixed $var
)
返回一个数据(变量或常量或表达式)的类型 var ,由于php的数据类型只有8种,一般它的返回值有8种。
例如:
输出结果:
settype bool settype ( mixed &$var
, string $type
) 将变量 var
的类型设置成 type
。
例如:
输出结果:
isset bool isset ( mixed $var
[, mixed $...
] ) 检测变量是否设置,并且不是 NULL
判断一个变量是否存在,存在就返回true,不存在就返回false
变量不存在的几种情况:
1,变量为被初始化(未被声明)!
2,变量被删除掉了!
3,变量的值为NULL,也认为不存在
另外,isset还可以用来判断一个数组的某个元素是否存在!以及对象的属性是否存在。如果一个变量未定义,一定不存在,反之不对
注意:判断一个常量是否存在不能用isset,而是使用以前学习的defined函数
empty bool empty ( mixed $var
) 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于FALSE
,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告
变量为空的判断依据如下(有两种情况):
1, 该变量根本就不存在,也就是用isset的结果为false!
2, 该变量存在,但是其值要么为空字符串要么为整型0要么为false要么为浮点0要么为字符串0要么为空数组
所以,一个判断为空的技巧是:如果该数据项强制转换为布尔值为false,使用empty的结果就为true,反之也是一样!
empty() 是 (boolean) var 的反义词!
is_int 或 is_integer 判断一个是否为整型数据类型
is_float 或is_double 判断一个变量是否为浮点类型
is_numeric 判断一个变量是否为数值类型 is_numeric=is_int+is_float
注意:如果一个字符串是一个数字字符串(里面全部为数字),也当成是一个数值型数据来处理
is_ sting 判断一个变量是否为字符串类型
is_bool 判断一个变量是否为布尔类型
is_array 判断一个变量是否为数组
is_object 判断一个变量是否为对象
is_null 判断一个变量是否为空类型
is_resource 判断一个变量是否为资源类型
流程控制简介
所谓的流程控制,就是指程序执行的“路线”,一般是用相关的语句来实现流程控制的!一般我们是用流程图来描述程序的流程(算法描述之一)
一般来说说,算法的描述常见的有两种方式:1, 流程图 2, 伪代码
流程控制的三大基本结构
顺序结构 顺序结果是整个脚本程序的基本结构!
选择结构 也叫分支结构,是在程序运行的过程中出现了两个或多个分支,而只能根据条件和相关的业务逻辑选择一个分支执行!if语句(又有三种形式)和switch语句
循环结构 是指在满足一定的条件的时候,重复执行某一段代码!while、do-while、for、foreach(数组和对象专用)
if语句 if语句就是用来控制分支结构的,一共有三种形式
条件执行 最简单的一种,只有if没有else,如果这里的语句块只有一条语句的时候,外面的花括号可以省掉的!
if-else形式
if-elseif-else 注意:这里的elseif是一个整体不要分开写!(和JS是不同)!
从上往下依次判断每一个条件,一旦有条件成立,就立即执行相应的语句块并跳出整个选择结构,如果所有的elseif后面的条件都不成立,就执行最后一个else语句的语句块,当然,最后的else是可以省略的
switch语句 又称之为开关语句!
语法如下:
switch(表达式){
case 表达式1:语句块1;break;
case 表达式2:语句块2;break;
case 表达式3:语句块4;break;
...
case 表达式n:语句块n;break;
default:语句块;
}
最后的default语句也可以没有!
执行流程如下:
1, 先计算switch后面表达式的值
2, 依次的计算case后面的表达式的值,一旦case后表达式的值与switch后表达式的值相同,语句的“开关”的打开了,依次执行后面的各个语句,一直遇到break语句或者右花括号为止!
3, 如果所有case后面表达式的值都和switch后面表达式的值不同,就执行最后一个default语句
if和switch的区别
if语句一般称之为条件分支,这里的条件往往是连接的一个范围
而switch语句一般称之为状态分支,这里的状态往往是离散的和已知的!
所以,以后编程中,如果需要判断的条件是一个范围,最好用if,如果判断的条件是已知的一些离散的状态,最好用switch
while语句 while也称之为当型循环!也就是当满足一定的条件的时候,重复的执行某一段代码(循环体)
语法:循环的初始化,while(条件表达式){循环体}
注意:
1, 我们一般是用一个或几个循环控制变量来控制while循环的结束
2, 在进行while循环之前,需要对循环控制变量进行初始化
3, 在循环体中,一般都有改变循环控制变量的语句,使得循环趋向结束,以免造成死循环!
例如:公鸡一只5元,母鸡一只3元,3只小鸡1元,一百元可以一百只鸡,请问可以买多少只公鸡,多少只母鸡,多少只小鸡呢?(百钱买白鸡)
输出结果:
do-while循环 也叫作直到型循环!一直执行循环体,直到循环条件不成立为止!至少执行一次循环体!
语法:循环的初始化,do{循环体}while(条件表达式)
while循环与do-while循环的区别:
1, while循环有可能一次都不执行循环体,但是do-while循环至少执行一次
2, 有时候循环的条件依赖于循环体执行的结果,此时只能用do-while循环!
for循环 for循环使用的是最多的,因为比较简洁紧凑
语法:for(循环的初始化;条件表达式;条件变化表达式){循环体}
例如:百钱买白鸡
输出结果:
循环的中断语句
continue 终止本次循环,跳到下一次循环,但当前循环没有结束
break 跳出当前循环,当前循环结束
运算符分类
一般是按照运算符连接的操作数的个数来进行分类:
单目运算符:也叫作单元运算符,也就是其用来连接的操作数只有一个,比如:++、--、按位取反~等
双目运算符:也是最多的,连接的操作数有两个,比如:加减乘除
三目运算符:只有一个,就是条件运算符 表达式1?表达式2:表达式3
运算符的优先级和结合性
优先级:当一个表达式中出现了多种运算符的时候,就要考虑运算符的先后运算次序的问题了,也就是运算符的优先级
如果一组运算符具有相同的优先级,就要考虑运算符的运算方向的问题,也就是运算符的结合性,如果是从左往右进行运算,就叫作左结合,如果是从右向左进行运算,就叫做右结合!
表达式和语句
表达式:用各种运算符和括号连接起来的式子就叫作表达式!一般来说,用XX运算符连接起来的式子就叫作XX表达式!
表达式和语句有很多相似的地方
一般来说,我们在一个表达式的后面加上一个分号,就变成了一条语句!
二者的本质区别:表达式的本质是要返回一个值,而语句的本质是执行一条命令。也就是说,任何一个表达式都会返回一个值!
常见的算术运算符
+:加法运算符,也是取正运算符
-:减法运算符,也是取负运算符 7-6 -10
*:乘法运算符
/:除数不能为0
%:求余运算符,也叫作模运算符,本质上还是做除法运算,但是只返回余数!
注意:
1, 在进行求余运算之前,运算数的两边都要转换为整型
2, 运算的结果的符号由被除数决定
自增自减运算符
++ --
$i++与++$i的区别(同样适用于$i—和--$i)
1, 如果只是单纯的将$i的值加1或减1的时候,它们没有任何的区别!
2, 如果$i自增的时候需要参与运算,此时就有区别了++在前面的意思就是先自增后使用,++在后面的意思就是先使用,后自增!
算术表达式
用算术运算符连接起来的式子就叫作算术表达式,算术表达式的值就是该表达式自己运算的结果!
在真实的项目中,我们往往需要借助一些数学函数把数学中的表达式转换成符合PHP语法的算术表达式,
赋值运算符
作用:将右边的表达式的值赋值给前面的变量!
语法形式为:
变量 = 表达式(包括变量、常量)
复合的赋值运算符
$a += 5; $a = $a + 5;
赋值表达式
赋值表达式的值就是其被赋值的那个变量的值!
-=
/=
*=
%=
.=
字符串运算符 也叫作字符串连接符,作用就是连接字符串!
注意:
1,在连接之前,系统会将两边的操作数都转换为字符串型,然后连接的结果就是简单的将字符串首尾相接!
2,echo的时候使用的逗号,不是字符串连接符,只是一个echo时候的分割符而已
echo的时候使用逗号分隔消耗的资源要少于使用字符串连接符,建议echo的时候尽量的用逗号
关系运算符
这里的关系是指大小关系,所以关系运算符也叫作比较运算符,一共有如下的几个:
< >
<= >=
== !=(<>)
=== !==
关系表达式的值只有两个:如果成立就是true,反之就是false!
逻辑运算符
一共有如下的几个:
逻辑与 && 或者 and(语法是一样的,只是and的优先级低于&&) 只有两边表达式同时为真的时候,整个逻辑表达式才为真!
逻辑或 只有两边的表达式同时为假的时候,整个逻辑表达式才为假!也就是说,只要有一个为真,整个表达式就为真!
逻辑非! 非真即假,非假即真!
逻辑异或 xor
如果两个表达式同时为真或同时为假,整个表达式就为假,一真一假,整个表达式就为真!
其实,除了异或,还有同或,但是PHP只实现了异或!
短路运算
逻辑与和逻辑或都存在短路运算的行为!
也就是说,使用逻辑与连接两个表达式的时候,如果第一个表达式已经为假了,无论第二个表达式是真还是假,整个表达式都为假,所以,第二个表达式既不执行也不起作用!
同样的,在使用逻辑或连接两个表达式的时候,如果第一个表达式已经为真,第二个表达式无论是真还是假,整个表达式都为真,所以,第二个表达式既不执行也不起任何的作用!
条件运算符 是PHP中唯一的一个三目运算符,所以条件运算符也叫三目运算符!
具体的语法形式如下:
表达式1?表达式2:表达式3
如果表达式1成立,就计算并返回表达式2的值,反之就返回表达式3的值,也就是说,整个条件表达式的值要么是表达式2的值要么是表达式3的值!
强调:条件运算符也有短路的行为,所以,我们可以利用条件运算符实现简单的if语句
位运算符 针对二进制位(bit)的一种运算方式,用的不是太多,但是效率很高!
一般来说,位运算符主要针对整型数据! , 整型数据占32个bit位,所以,一个整型数据的位运算要计算32次! 而一个bit位只有两种状态:0和1,类似于数据中的布尔型!
位运算符主要包括以下的几个:
&:按位与,表示两个位都为1的时候,才返回1,否则就返回0(类比逻辑运算符中的&&)
|:按位或,表示两个位同时为0的时候,返回0,否则返回1(类比逻辑或||)
~:按位非,非0即1,非1即0
^:按位异或,如果两个位相同则返回0,不同则返回1
<<:按位左移,将整个字节向左移动,右边用0填充!
>>:按位右移,将整个字节向右移动,如果是正数,左边补0,如果是负数,左边补1
其他运算符 clone|new 面向对象的时候,new是实例化一个对象,clone是克隆一个对象
@ 错误抑制符 作用:抑制系统错误信息!
很多时候,我们要抑制系统的错误信息,因为不友好,然后再加上一些用户的友好的提示信息!
instanceof 也是和面向对象相关的,作用是判断一个对象是否为一个类的实例!
有两个参数:第一个参数是一个对象变量,第二个参数是一个类
, 逗号运算符,在整个运算符中优先级别是最低的 ,往往就是用来分割参数等!
php类型的相关函数,运算符,条件判断,循环的更多相关文章
- 值类型之间的相互转化,运算符,if条件判断,循环,函数
值类型之间的相互转化 number | string | boolean 一.转换为boolean=>Boolean(a); var num = 10; var s = '123'; var b ...
- Python 条件判断 循环
age = 20 if age >= 18: print('your age is', age) print('adult') 根据Python的缩进规则,如果if语句判断是True,就把缩进的 ...
- python笔记五(条件判断/循环/break和continue)
一 条件判断 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> ...
- Python基础:条件判断 &&循环
1:条件判断 2:循环 2.1:for 2.2 while 小结: continue :跳出本次循环 进行下次循环, break :结束循环体.
- Ruby学习中(条件判断, 循环, 异常处理)
一. 条件判断 详情参看:https://www.runoob.com/ruby/ruby-decision.html 1.详情实例(看看就中了) #---------------# # LOL场均人 ...
- python 输入输出 条件判断 循环
1.条件判断 score = int(input("请输入学生成绩:"))if score>100 and score <0: print("请输入正确的成绩 ...
- Dart运算符条件判断类型转换
/* 1.Dart运算符: 算术运算符 + - * / ~/ (取整) %(取余) 关系运算符 == != > < >= <= 逻辑运算符 ! && || 赋值 ...
- Python基础:条件与循环
条件语句 除了 boolean 类型的数据,条件判断最好是显性的 if i != 0: ... 而不是只写出变量名: if i: ... For循环与While循环 通常来说,如果你只是遍历一个已知的 ...
- python数据类型、输入输出、运算符、条件判断、循环
变量以及类型 变量:存储程序运行中的数据,变量有3个要素:变量名.变量类型.变量值.python属于弱类型语言,不需要声明变量类型. [root@localhost python]# ipython3 ...
随机推荐
- linux apache 配置URL地址栏大小写不敏感配置
1.apache配置 解决如下:把mod_speling.so放到apache目录下的 lib中... 然后修改http.conf文件, 加入:LoadModule speling_module /u ...
- ASP.NET MVC5 实现网址伪静态
一.路由规则: routes.MapRoute( name: "Default1", url: "more_{root}_{plate}.html", defa ...
- Android Context 上下文 你必须知道的一切
本文转载于:http://blog.csdn.net/lmj623565791/article/details/40481055 转载请标明出处:http://blog.csdn.net/lmj623 ...
- Spring源码学习之: 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...
- .net framework 3.5 序列化
1.JSON序列化. 首先,引用程序集 System.Runtime.Serialization, 我们要使用System.Runtime.Serialization.Json,默认点不出来,这应该是 ...
- Windows 2012 中文乱码的解决办法
背景:服务器安装2012 R2英文环境,软件为中文显示.已下载中文语言包安装到服务器上 现象:TXT文档的中文在服务器上打开显示为乱码,复制到本地电脑上可正常显示 解决办法:控制面板-语言-更改日期. ...
- 【原创】关于不同分支代码的Merge有了透彻的理解
多分支开发,Merge是一个绕不过的话题,不管是Git还是SVN,公司用的是SVN,之前对于SVN的Merge没有很好的研究,出了些状况,这个问题不解决,顺畅地进行多分支开发就是海市蜃楼,下定决心把这 ...
- C# FileSystemWatcher监听文件事件
现有一个需求如下:监控某个目录中的文件修改,创建,删除等信息,并记录下来. 这里用到FileSystemWatcher类.由于考虑到文件的写入量会很频率,所以考虑先将监听到的消息记录到内存中. 监听部 ...
- java容器的一些存取用法
关于集合(list,set,map)的遍历与增强for循环的使用 java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以 ...
- bzoj1039: [ZJOI2008]无序运动Movement
Description D博士对物理有着深入的研究,经典物理.天体物理.量子物理都有着以他的名字命名的定理.最近D博士着迷于研究粒子运动的无规则性.对圣经深信不疑的他相信,上帝创造的任何事物必然是有序 ...