第十三课:运算符
在第九课我们学过了 PHP中的运算,学习中碰到的问题大家讨论热烈,特别是rq2004提出的“echo "a".$a+$b."a".($a+$b)+$a;”PHP会怎么计算的问题,以前学习PHP的人从来没有谁认真考虑过这样的事。虽然这样的运算在实际编程中不常用到,但是我们会员的这种学术精神可圈可点。随后的学习过程中大家要求掌握更多的相关知识,所以这一课我们更进一步探讨PHP中的运算符,让你掌握更多的运算知识。 1。赋值运算符 基本的赋值运算符是“=”。如果你认为这是一个等号,那就错了。它实际的意思是左边的操作数得到右边表达式的值。例如你可以用下面的方式做一些复杂的事情。例如13-1: $a = ( $b=4 ) + 5; // 现在$a等于9,$b等于4 。 除了基本的赋值运算符外,还有“复合运算符”。对于所有二进制数和字符串,允许对变量进行自我复合运算。例如13-2: <? php $a = 3 ; $a += 5 ; // 把$a 设成8,也就是 $a=$a+5。 $b = ' hi ' ; $b .= ' 你好 ' ; // 把$b设成“hi你好”,也就是 $b=$b.'你好'。 ?> 使用自我复合运算时可以明显提高编译效率。 2。比较运算符 比较运算符,如同它们名称所暗示的,允许对两个值进行比较。表格: 比较运算符 $a == $b等于TRUE,如果 $a 等于 $b。$a === $b全等TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进)$a != $b不等TRUE,如果 $a 不等于 $b。$a <> $b不等TRUE,如果 $a 不等于 $b。$a !== $b非全等TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进)$a < $b小与TRUE,如果 $a 严格小于 $b。$a > $b大于TRUE,如果 $a 严格 $b。$a <= $b小于等于TRUE,如果 $a 小于或者等于 $b。$a >= $b大于等于TRUE,如果 $a 大于或者等于 $b。 如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。 例如13-3: <? php $userName = ' PHP中文论坛 ' ; if ( $userName == ' PHP中文社区 ' ) echo ' 欢迎你回来! ' ; else echo ' 用户名错误。 ' ; ?> 3。逻辑运算符表格: 逻辑运算符 $a and $bAnd(逻辑与)TRUE,如果 $a 与 $b 都为 TRUE。$a or $bOr(逻辑或)TRUE,如果 $a 或 $b 任一为 TRUE。$a xor $bXor(逻辑异或)TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。! $aNot(逻辑非)TRUE,如果 $a 不为 TRUE。$a && $bAnd(逻辑与)TRUE,如果 $a 与 $b 都为 TRUE。$a || $bOr(逻辑或)TRUE,如果 $a 或 $b 任一为 TRUE。 “与”和“或”有两种不同形式运算符的原因是它们运算的优先级不同。例子13-4: <? php $userName = ' PHP中文论坛 ' ; $passWord = ' aaa999 ' ; if ( $userName == ' PHP中文社区 ' && $passWord == ' aaa999 ' ) echo ' 欢迎你回来! ' ; else echo ' 用户名或密码错误。 ' ; ?> 例子13-5: <? php $userName = ' phpNet ' ; if ( $userName == ' PHP中文社区 ' || $userName == ' phpNet ' || $userName == ' phpNetCn ' ) echo " 欢迎社区成员{$userName}回来! " ; else echo ' 你不是本站会员,请注册后登录。 ' ; ?> 4。三元运算符 请看表达式: ( expr1 ) ? ( expr2 ) : ( expr3 ); 若expr1运算结果为真(TRUE),则执行expr2,否则执行expr3。实际上它有点类似于if...else,但可以让程序更精简有效。例如13-6: <? php $n = 20 ; // 定义表格行数 echo ' <table borer=1 width=300> ' ; for ( $i = 1 ; $i <= $n ; $i ++ ){ $bg = ( $i % 2 == 1 ) ? ' #ccccff ' : ' #99cc99 ' ; // 利用三元运算符定义表格中行的背景色 echo " <tr bgcolor=$bg><td>第{$i}行</td></tr> " ; } echo ' </table> ' ; ?> 例子中利用三元运算符定义表格行的背景色的代码,你能看懂吗?我看到有人实现这个效果的代码大段大段的,其实用上三元运算符只这行代码就足够了。解释一下吧:如果 $i%2==1 的结果为真,则$bg='#ccccff',否则$bg='#99cc99'。 5。运算符优先级 运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(“*”)的优先级比加号(“+”)高。必要时可以用括号来强制改变优先级。例如:(1 + 5) * 3 的值为 18。如果运算符优先级相同,则使用从左到右的左联顺序。 下表从高到低列出了运算符的优先级。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序表格: 运算符优先级 非结合newnew左[array()非结合++ --递增/递减运算符 非结合! ~ - (int) (float) (string) (array) (object) @类型 左* / %算数运算符 左+ - .算数运算符和字符串运算符左<< >>位运算符 非结合< <= > >=比较运算符 非结合== != === !==比较运算符 左&位运算符和引用左^位运算符 左|位运算符 左&&逻辑运算符 左||逻辑运算符 左? :三元运算符 右= += -= *= /= .= %= &= |= ^= <<= >>= 赋值运算符 左and逻辑运算符 左xor逻辑运算符 左or逻辑运算符 左,多处用到 左联表示表达式从左向右求值,右联相反。 6。错误控制运算符 PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。例如13-7: <? php echo @ $a ; // 如果你去掉运算符“@”再试试看。 ?> 如果你不想在网页中看到程序的出错信息,就在表达式前面加这个运算符“@”吧。 PHP中还有执行运算符和位运算符,本课中讲述它们可能你接受起来有点难度,如果你想掌握它们可以看PHP手册和相关资料。好了,本课就讲到这里,好好练习吧。