您好,欢迎访问三七文档
一、算术运算符还记得学校里学到的基本数学知识吗?就和它们一样。算术运算符除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。取模运算符%的结果和被除数的符号(正负号)相同。即\$a%\$b的结果和\$a的符号相同。例如:?phpecho(5%3).\n;//prints2echo(5%-3).\n;//prints2echo(-5%3).\n;//prints-2echo(-5%-3).\n;//prints-2?二、赋值运算符基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。赋值运算表达式的值也就是所赋的值。也就是说,“$a=3”的值是3。这样就可以做一些小技巧:?php$a=($b=4)+5;//$a现在成了9,而$b成了4。?对于数组array,对有名字的键赋值是用“=”运算符。此运算符的优先级和其它赋值运算符相同。在基本赋值运算符之外,还有适合于所有二元算术,数组集合和字符串运算符的“组合运算符”,这样可以在一个表达式中使用它的值并把表达式的结果赋给它,例如:?php$a=3;$a+=5;//sets$ato8,asifwehadsaid:$a=$a+5;$b=Hello;$b.=There!;//sets$btoHelloThere!,justlike$b=$b.There!;?注意赋值运算将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。这也适合于在密集循环中拷贝一些值例如大数组。引用赋值PHP支持引用赋值,使用“\$var=&$othervar;”语法。引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西。?php$a=3;$b=&$a;//$b是$a的引用print$a\n;//输出3print$b\n;//输出3$a=4;//修改$aprint$a\n;//输出4print$b\n;//也输出4,因为$b是$a的引用,因此也被改变?三、位运算符位运算符允许对整型数中指定的位进行求值和操作。Example1整数的AND,OR和XOR位运算符?php/**Ignorethetopsection,*itisjustformattingtomakeoutputclearer.*/$format='(%1$2d=%1$04b)=(%2$2d=%2$04b)'.'%3$s(%4$2d=%4$04b)'.\n;echoEOH-----------------------------resultvalueoptest-----------------------------EOH;/**Herearetheexamples.*/$values=array(0,1,2,4,8);$test=1+4;echo\nBitwiseAND\n;foreach($valuesas$value){$result=$value&$test;printf($format,$result,$value,'&',$test);}echo\nBitwiseInclusiveOR\n;foreach($valuesas$value){$result=$value|$test;printf($format,$result,$value,'|',$test);}echo\nBitwiseExclusiveOR(XOR)\n;foreach($valuesas$value){$result=$value^$test;printf($format,$result,$value,'^',$test);}?以上例程会输出:-----------------------------resultvalueoptest-----------------------------BitwiseAND(0=0000)=(0=0000)&(5=0101)(1=0001)=(1=0001)&(5=0101)(0=0000)=(2=0010)&(5=0101)(4=0100)=(4=0100)&(5=0101)(0=0000)=(8=1000)&(5=0101)BitwiseInclusiveOR(5=0101)=(0=0000)|(5=0101)(5=0101)=(1=0001)|(5=0101)(7=0111)=(2=0010)|(5=0101)(5=0101)=(4=0100)|(5=0101)(13=1101)=(8=1000)|(5=0101)BitwiseExclusiveOR(XOR)(5=0101)=(0=0000)^(5=0101)(4=0100)=(1=0001)^(5=0101)(7=0111)=(2=0010)^(5=0101)(1=0001)=(4=0100)^(5=0101)(13=1101)=(8=1000)^(5=0101)四、比较运算符比较运算符,如同它们名称所暗示的,允许对两个值进行比较。如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于switch语句。当用===或!==进行比较时则不进行类型转换,因为此时类型和数值都要比对。?phpvar_dump(0==a);//0==0-truevar_dump(1==01);//1==1-truevar_dump(10==1e1);//10==10-truevar_dump(100==1e2);//100==100-trueswitch(a){case0:echo0;break;casea://neverreachedbecauseaisalreadymatchedwith0echoa;break;}?标准数组比较代码?php//数组是用标准比较运算符这样比较的functionstandard_array_compare($op1,$op2){if(count($op1)count($op2)){return-1;//$op1$op2}elseif(count($op1)count($op2)){return1;//$op1$op2}foreach($op1as$key=$val){if(!array_key_exists($key,$op2)){returnnull;//uncomparable}elseif($val$op2[$key]){return-1;}elseif($val$op2[$key]){return1;}}return0;//$op1==$op2}?五、执行运算符PHP支持一个执行运算符:反引号(``)。注意这不是单引号!PHP将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。?php$output=`ls-al`;echopre$output/pre;?Note:反引号运算符在激活了安全模式或者关闭了shell_exec()时是无效的。六、递增/递减运算符PHP支持C风格的前后递增与递减运算符。Note:递增/递减运算符不影响布尔值。递减NULL值也没有效果,但是递增NULL的结果是1。一个简单的示例脚本:?phpechoh3Postincrement/h3;$a=5;echoShouldbe5:.$a++.br/\n;echoShouldbe6:.$a.br/\n;echoh3Preincrement/h3;$a=5;echoShouldbe6:.++$a.br/\n;echoShouldbe6:.$a.br/\n;echoh3Postdecrement/h3;$a=5;echoShouldbe5:.$a--.br/\n;echoShouldbe4:.$a.br/\n;echoh3Predecrement/h3;$a=5;echoShouldbe4:.--$a.br/\n;echoShouldbe4:.$a.br/\n;?在处理字符变量的算术运算时,PHP沿袭了Perl的习惯,而非C的。例如,在Perl中'Z'+1将得到'AA',而在C中,'Z'+1将得到'['(ord('Z')==90,ord('[')==91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z和A-Z)。涉及字符变量的算数运算:?php$i='W';for($n=0;$n6;$n++){echo++$i.\n;}?以上例程会输出:XYZAAABAC七、逻辑运算符“与”和“或”有两种不同形式运算符的原因是它们运算的优先级不同逻辑运算符示例:?php//下面的foo()不会被调用,因为它们被运算符“短路”了。$a=(false&&foo());$b=(true||foo());$c=(falseandfoo());$d=(trueorfoo());//||的优先级比or高$e=false||true;//$e被赋值为(false||true),结果为true$f=falseortrue;//$f被赋值为false[Altair注:=的优先级比or高]var_dump($e,$f);//&&的优先级比and高$g=true&&false;//$g被赋值为(true&&false),结果为false$h=trueandfalse;//$h被赋值为true[Altair注:=的优先级比and高]var_dump($g,$h);?以上例程的输出类似于:bool(true)bool(false)bool(false)bool(true)八、字符串运算符有两个字符串运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数后。?php$a=Hello;$b=$a.World!;//now$bcontainsHelloWorld!$a=Hello;$a.=World!;//now$acontainsHelloWorld!?九、数组运算符+运算符把右边的数组元素(除去键值与左边的数组元素相同的那些元素)附加到左边的数组后面,但是重复的键值不会被覆盖。?php$a=array(a=apple,b=banana);$b=array(a=pear,b=strawberry,c=cherry);$c=$a+$b;//Unionof$aand$bechoUnionof\$aand\$b:\n;var_dump($c);$c=$b+$a;//Unionof$band$aechoUnionof\$band\$a:\n;var_dump($c);?执行后,此脚本会显示:Unionof$aand$b:array(3){[a]=string(5)apple[b]=string(6)banana[c]=string(6)cherry}Unionof$band$a:array(3){[a]=string(4)pear[b]=string(10)strawberry[c]=string(6)cherry}数组中的单元如果具有相同的键名和值则比较时相等。十、小结本节讲了PHP的运算符,它包含算术运算符、赋值运算符、位运算符、比较运算符、执行运算符、递增递减运算符、逻辑运算符、字符串运算符和数组运算符,它们之间的优先级也非常重要。十一、练习请掌握各个运算符的优先级。
本文标题:PHP教程第七讲
链接地址:https://www.777doc.com/doc-3263894 .html