php 操作符与控制结构


Posted in PHP onMarch 07, 2012

操作符

操作符是用来对数组和变量进行某种操作运算的符号。

1、算术操作符

操作符 名称 示例
+ $a+$b
- $a-$b
* $a*$b
/ $a/$b
% 取余 $a%$b

2、复合赋值操作符

操作符 使用方法 等价于
+= $a+=$b $a=$a+$b
-= $a-=$b $a=$a-$b
*= $a*=$b $a=$a*$b
/= $a/=$b $a=$a/$b
%= $a%=$b $a=$a%$b
.= $a.=$b $a=$a.$b

前置递增递减和后置递增递减运算符:

$a=++$b;

$a=$b++;

$a=--$b;

$a=$b--;

3、比较运算符

操作符 名称 使用方法
= = 等于 $a= =$b
= = = 恒等 $a= = =$b
!= 不等 $a!=$b
!= = 不恒等 $a!= =$b
不等 $a$b
小于 $a
> 大于 $a>$b
小于等于 $a
>= 大于等于 $a>=$b

注:恒等表示只有两边操作数相等并且数据类型也相当才返回true;

例如:0= ="0" 这个返回为true ,因为操作数相等

      0= = ="0"  这个返回为false,因为数据类型不同

4、逻辑运算符

操作符 使用方法 使用方法 说明
! !$b 如果$b是false,则返回true;否则相反
&& $a&&$b 如果$a和$b都是true,则结果为true;否则为false
|| $a||$b 如果$a和$b中有一个为true或者都为true时,其结果为true;否则为false
and $a and $b 与&&相同,但其优先级较低
or $a or $b 与||相同,但其优先级较低

操作符"and""or"&&||的优先级要低。

5、三元操作符

Condition ? value if true : value if false

示例:($grade>=50 ? "Passed" : "Failed")

6、错误抑制操作符:

$a=@(57/0);

除数不能为0,会出错,所以加上@避免出现错误警告。

7、数组操作符

操作符 使用方法 使用方法 说明
+ 联合 !$b 返回一个包含了$a和$b中所有元素的数组
= = 等价 $a&&$b 如果$a和$b具有相同的元素,返回true
= = = 恒等 $a||$b 如果$a和$b具有相同的元素以及相同的顺序,返回true
!= 非等价 $a and $b 如果$a和$b不是等价的,返回true
非等价   如果$a和$b不是等价的,返回true
!= = 非恒等 $a or $b 如果$a和$b不是恒等的,返回true

操作符的优先级和结合性:

一般地说,操作符具有一组优先级,也就是执行他们的顺序。

操作符还具有结合性,也就是同一优先级的操作符的执行顺序。这种顺序通常有从左到右,从右到左或者不相关。

下面给出操作符优先级的表。最上面的操作符优先级最低,按着表的由上而下的顺序,优先级递增。

操作符优先级

结合性 操作符
Or
Xor
And
Print
= += -= *= /= .= %= &= |= ^= ~= >=
?:
||
&&
|
^
&
不相关 = =  != =  = = =  != =
不相关 >=
>
+ - .
* / %
! ~ ++ -- (int)(double)(string)(array)(object) @
[]
不相关 New
不相关 ()

为了避免优先级混乱,可以使用括号避开优先级。

控制结构

如果我们希望有效地相应用户的输入,代码就需要具有判断能力。能够让程序进行判断的结构称为条件。

1、if..else循环有三种结构
第一种是只有用到if条件,当作单纯的判断。解释成“若发生了某事则怎样处理”。语法如下:
if (expr) { statement }
其中的expr为判断的条件,通常都是用逻辑运算符号当判断的条件。而statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。
范例:本例省略大括号。

<?php 
if ($state==1)echo "哈哈" ; 
?>

这里特别注意的是,判断是否相等是==而不是=,ASP程序员可能常犯这个错误,=是赋值。
范例:本例的执行部分有三行,不可省略大括号。
<?php 
if ($state==1) { 
echo "哈哈 ; 
echo "<br>" ; 
} 
?>

第二种是除了if之外,加上了else的条件,可解释成“若发生了某事则怎样处理,否则该如何解决”。语法如下:
if (expr) { statement1 } else { statement2 }
范例:上面的例子来修改成更完整的处理。其中的else由于只有一行执行的指令,因此不用加上大括号。
<?php 
if ($state==1) { 
echo "哈哈" ; 
echo "<br>"; 
} 
else{ 
echo "呵呵"; 
echo "<br>"; 
} 
?>

第三种就是递归的if..else循环,通常用在多种决策判断时。它将数个if..else拿来合并运用处理。
直接看下面的例子:

<?php 
if ( $a > $b ) { 
echo "a 比 b 大" ; 
} elseif ( $a == $b ) { 
echo "a 等于 b" ; 
} else { 
echo "a 比 b 小" ; 
} 
?>

上例只用二层的if..else循环,用来比较a和b两个变量。实际要使用这种递归if..else循环时,请小心使用,因为太多层的循环容易使设计的逻辑出问题,或者少打了大括号等,都会造成程序出现莫名其妙的问题。

2、for循环就单纯只有一种,没有变化,它的语法如下:
for (expr1; expr2; expr3) { statement }
其中的expr1为条件的初始值。expr2为判断的条件,通常都是用逻辑运算符号(logical operators)当判断的条件。expr3为执行statement后要执行的部份,用来改变条件,供下次的循环判断,如加一..等等。而statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。
下例是用for循环写的的例子:

<?php 
for ( $i = 1 ; $i <= 10 ; $i ++) { 
echo "这是第".$i."次循环<br>" ; 
} 
?>

3、switch循环,通常处理复合式的条件判断,每个子条件,都是case指令部分。在实作上若使用许多类似的if指令,可以将它综合成switch循环。
语法如下:
switch (expr) { case expr1: statement1; break; case expr2: statement2; break; default: statementN; break; }
其中的expr条件,通常为变量名称。而case后的exprN,通常表示变量值。冒号后则为符合该条件要执行的部分。注意要用break跳离循环。
<?php 
switch ( date ( "D" )) { 
case "Mon" : 
echo "今天星期一" ; 
break; 
case "Tue" : 
echo "今天星期二" ; 
break; 
case "Wed" : 
echo "今天星期三" ; 
break; 
case "Thu" : 
echo "今天星期四" ; 
break; 
case "Fri" : 
echo "今天星期五" ; 
break; 
default: 
echo "今天放假" ; 
break; 
} 
?>

这里需要注意的是break;别遗漏了,default,省略是可以的。
很明显的,上述的例子用if循环就很麻烦了。当然在设计时,要将出现机率最大的条件放在最前面,最少出现的条件放在最后面,可以增加程序的执行效率。上例由于每天出现的机率相同,所以不用注意条件的顺序。
PHP 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
发布一个用PHP fsockopen写的HTTP下载的类
Feb 22 PHP
PHP中的session永不过期的解决思路及实现方法分享
Apr 20 PHP
PHP中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
Feb 13 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
php实现的RSS生成类实例
Apr 23 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 PHP
PHP新手指南
Apr 01 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 #PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
Mar 06 #PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
Mar 05 #PHP
php在服务器执行exec命令失败的解决方法
Mar 03 #PHP
Php Ctemplate引擎开发相关内容
Mar 03 #PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 #PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
Mar 01 #PHP
You might like
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
python 实现控制鼠标键盘
2020/11/27 Python
python中os.remove()用法及注意事项
2021/01/31 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
幼儿园老师辞职信
2014/01/20 职场文书
办公室副主任职责范本
2014/03/08 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
我爱读书演讲稿
2014/05/07 职场文书
主持人演讲稿
2014/05/13 职场文书
个人承诺书格式
2014/06/03 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
个人公司授权委托书范本
2014/10/12 职场文书