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 相关文章推荐
浅谈php安全性需要注意的几点事项
Jul 17 PHP
PHP文件锁函数flock()详细介绍
Nov 18 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 PHP
PHP面向对象详解(三)
Dec 07 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
php in_array() 检查数组中是否存在某个值详解
Nov 23 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
phpstudy的php版本自由修改的方法
Oct 18 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
Mar 31 PHP
Smarty模板类内部原理实例分析
Jul 03 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
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
一个Action如何调用两个不同的方法
2014/05/22 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Python递归函数定义与用法示例
2017/06/02 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
Python序列类型的打包和解包实例
2019/12/21 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
心理健康教育制度
2014/01/27 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang