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 MYSQL 数据备份类
Jun 19 PHP
php三维数组去重(示例代码)
Nov 26 PHP
php下获取http状态的实现代码
May 09 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
php实现的Cookies操作类实例
Sep 24 PHP
php实现的双向队列类实例
Sep 24 PHP
php实现通用的信用卡验证类
Mar 24 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
May 07 PHP
PHP环境搭建(php+Apache+mysql)
Nov 14 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
php链式操作的实现方式分析
Aug 12 PHP
在thinkphp5.0路径中实现去除index.php的方式
Oct 16 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
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
PHP return语句的另一个作用
2014/07/30 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
跟老齐学Python之做一个小游戏
2014/09/28 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
2014年村计划生育工作总结
2014/11/14 职场文书
追悼会答谢词
2015/01/05 职场文书
中学教师教学工作总结
2015/08/13 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
商业计划书格式、范文
2019/03/21 职场文书
Pandas搭配lambda组合使用详解
2022/01/22 Python
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸