8:PHP运算符

一、算术运算符

除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。

取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。

取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。例如:

算术运算符
例子 名称 结果
-$a 取反 $a 的负值。
$a + $b 加法 $a $b 的和。
$a - $b 减法 $a $b 的差。
$a * $b 乘法 $a $b 的积。
$a / $b 除法 $a 除以 $b 的商。
$a % $b 取模 $a 除以 $b 的余数。
  1. <?php
  2.  echo ( 5  %  3 ). "\n" ;            //  2
  3.  echo ( 5  % - 3 ). "\n" ;           //  2
  4.  echo (- 5  %  3 ). "\n" ;           //  -2
  5.  echo (- 5  % - 3 ). "\n" ;          //  -2

 

二、赋值运算符

基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。

赋值运算表达式的值也就是所赋的值。这样就可以做一些小技巧:

  1. <?php
  2.  $a  = ( $b  =  4 ) +  5 ;  // $a 现在成了 9,而 $b 成了 4。
  3.  $a  =  3 ;
  4.  $a  +=  5 ;  //8; $a = $a + 5;$a -=5
  5.  $b  =  "你好!" ;
  6.  $b  .=  "付杰博客!" ;  // 你好!付杰博客!;  $b = $b . "付杰博客";

 

三、位运算符

位运算符允许对整型数中指定的位进行求值和操作。

位移在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。

要用括号确保想要的优先级。例如 $a & $b == true 先进行比较再进行按位与;而 ($a & $b) == true 则先进行按位与再进行比较。

要注意数据类型的转换。如果左右参数都是字符串,则位运算符将对字符的 ASCII 值进行操作。

位运算符
例子 名称 结果
$a & $b And(按位与) 将把 $a $b 中都为 1 的位设为 1。
$a | $b Or(按位或) 将把 $a $b 中任何一个为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把 $a $b 中一个为 1 另一个为 0 的位设为 1。
~ $a Not(按位取反) $a 中为 0 的位设为 1,反之亦然。
$a << $b Shift left(左移) $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a >> $b Shift right(右移) $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。
  1. <?php
  2. $a=120;
  3. $b=100;
  4. if($a >=100 & $b>=100){
  5.     echo 'OK!欢迎关注www.fujieace.com!';//OK!欢迎关注www.fujieace.com!
  6. }
  7. if($a >100 | $b>100){
  8.     echo 'OK!欢迎关注www.fujieace.com!';//OK!欢迎关注www.fujieace.com!
  9. }
  10. $a=0;
  11. $b=1;
  12. if($a^$b){
  13.     echo 'OK!欢迎关注www.fujieace.com!';//OK!欢迎关注www.fujieace.com!
  14. }
  15. $a=0;
  16. if(~$a){
  17.     echo 'OK!欢迎关注www.fujieace.com!';//OK!欢迎关注www.fujieace.com!
  18. }
  19. $a=123456;
  20. $b=2;
  21. echo $a<<$b;//493824; 123456*2*2
  22. echo $a>>$b;//30864; 123456/2/2

 

四、比较运算符

比较运算符,如同它们名称所暗示的,允许对两个值进行比较。

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。

比较运算符
例子 名称 结果
$a == $b 等于 TRUE ,如果类型转换后 $a 等于 $b
$a === $b 全等 TRUE ,如果 $a 等于 $b ,并且它们的类型也相同。
$a != $b 不等 TRUE ,如果类型转换后 $a 不等于 $b
$a <> $b 不等 TRUE ,如果类型转换后 $a 不等于 $b
$a !== $b 不全等 TRUE ,如果 $a 不等于 $b ,或者它们的类型不同。
$a < $b 小与 TRUE ,如果 $a 严格小于 $b
$a > $b 大于 TRUE ,如果 $a 严格大于 $b
$a <= $b 小于等于 TRUE ,如果 $a 小于或者等于 $b
$a >= $b 大于等于 TRUE ,如果 $a 大于或者等于 $b
  1. <?php
  2. var_dump ( 0  ==  "a" );  // 0 == 0 -> true
  3. var_dump ( "1"  ==  "01" );  // 1 == 1 -> true
  4. var_dump ( "10"  ==  "1e1" );  // 10 == 10 -> true
  5. var_dump ( 100  ==  "1e2" );  // 100 == 100 -> true

 

五、错误控制运算符

PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

如果用 set_error_handler() 设定了自定义的错误处理函数,仍然会被调用,但是此错误处理函数可以(并且也应该)调用 error_reporting() ,而该函数在出错语句前有 @ 时将返回 0。

  1. <?php
  2. echo $fujie;//报错:Notice: Undefined variable: fujie
  3. echo @$fujie;//什么都不输出,也不会报错!

 

六、执行运算符

PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。

此运算符shell命令下有效;

  1. <?php
  2. $output  = ` ls -al `;
  3. echo  "<pre> $output </pre>" ;

Note:

反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。

与其它某些语言不同,反引号不能在双引号字符串中使用。

 

七、递增/递减运算符

PHP 支持 C 风格的前/后递增与递减运算符。

Note: 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。

递增/递减运算符
例子 名称 效果
++$a 前加 $a 的值加一,然后返回 $a
$a++ 后加 返回 $a ,然后将 $a 的值加一。
--$a 前减 $a 的值减一, 然后返回 $a
$a-- 后减 返回 $a ,然后将 $a 的值减一。
  1. <?php
  2. $a=12;
  3. echo $a++;//12
  4. echo $a;//13
  5. $a=12;
  6. echo ++$a;//13
  7. echo $a;//13
  8. $a=12;
  9. echo --$a;//11
  10. echo $a;//11
  11. $a=12;
  12. echo $a--;//12
  13. echo $a;//11

 

八、逻辑运算符

逻辑运算符
例子 名称 结果
$a and $b And(逻辑与) TRUE ,如果 $a $b 都为 TRUE
$a or $b Or(逻辑或) TRUE ,如果 $a $b 任一为 TRUE
$a xor $b Xor(逻辑异或) TRUE ,如果 $a $b 任一为 TRUE ,但不同时是。
! $a Not(逻辑非) TRUE ,如果 $a 不为 TRUE
$a && $b And(逻辑与) TRUE ,如果 $a $b 都为 TRUE
$a || $b Or(逻辑或) TRUE ,如果 $a $b 任一为 TRUE
  1. <?php
  2. $a=0;
  3. $b=1;
  4. var_dump($a and $b);//bool(false) 
  5. var_dump($a or $b);//bool(true) 
  6. var_dump($a xor $b);//bool(true) 
  7. var_dump(!$a);//bool(true) 
  8. var_dump($a && $b);//bool(false) 
  9. var_dump($a || $b);//bool(true) 

 

九、字符串运算符

有两个字符串( string )运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数之后。

  1. <?php
  2. $a  =  "付杰" ;
  3.  $b  =  $a  .  "博客" ;  // 付杰博客
  4. $a  =  "付杰博客:" ;
  5.  $a  .=  "www.fujieace.com" ;      // 付杰博客:www.fujieace.com

 

十、数组运算符

数组运算符
例子 名称 结果
$a + $b 联合 $a $b 的联合。
$a == $b 相等 如果 $a $b 具有相同的键/值对则为 TRUE
$a === $b 全等 如果 $a $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE
$a != $b 不等 如果 $a 不等于 $b 则为 TRUE
$a <> $b 不等 如果 $a 不等于 $b 则为 TRUE
$a !== $b 不全等 如果 $a 不全等于 $b 则为 TRUE
  1. <?php
  2. $a=0;
  3. $b=1;
  4. $c=false;
  5. var_dump($a + $b);//int(1) 
  6. var_dump($a == $c);//bool(true) 
  7. var_dump($a === $c);// bool(false) 
  8. var_dump($a != $c);//bool(false) 
  9. var_dump($a <> $c);//bool(false) 
  10. var_dump($a !== $b);//bool(true)

 

十一、类型运算符

instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例:

  1. <?php
  2.  class  MyClass
  3.  {
  4. }
  5.  class  NotMyClass
  6.  {
  7. }
  8.  $a  = new  MyClass ;
  9.  var_dump ( $a  instanceof  MyClass );//bool(true)
  10.  var_dump ( $a  instanceof  NotMyClass );// bool(false) 

php运算符

十二、三元运算符

另一个条件运算符是"? :"(或三元)运算符 。

 

语法格式:

(expr1) ? (expr2) : (expr3)

 

对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。

  1. <?php
  2. $a='www.fujieace.com';
  3. echo isset($a) ? '$a存在' : '$a不存在!';//$a存在
    A+
发布日期:2016年12月29日 19:46:14  所属分类:PHP教程
最后更新时间:2016-12-29 22:48:11
付杰
  • ¥ 388.0元
  • 市场价:388.0元
  • ¥ 498.0元
  • 市场价:998.0元
  • ¥ 69.0元
  • 市场价:69.0元
  • ¥ 999元
  • 市场价:4999元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  0   博主  0

  1. 付杰 付杰

    组合比较符(PHP7+)
    PHP7+ 支持组合比较符,实例如下:

    1. <?php  
    2. // 整型  
    3. echo 1 <=> 1; // 0  
    4. echo 1 <=> 2; // -1  
    5. echo 2 <=> 1; // 1  
    6.   
    7. // 浮点型  
    8. echo 1.5 <=> 1.5; // 0  
    9. echo 1.5 <=> 2.5; // -1  
    10. echo 2.5 <=> 1.5; // 1  
    11.    
    12. // 字符串  
    13. echo “a” <=> “a”// 0  
    14. echo “a” <=> “b”// -1  
    15. echo “b” <=> “a”// 1  
    • 头像 你猜我是谁? 5

      @付杰 还没有用过这语法!目前都是用php5.6及以下版本,php7都还没用过!

      • 付杰 付杰

        @你猜我是谁? 现在很多项目都是用的php5.6,以前开发的老项目还有5.2,5.3的,毕竟php7刚出来不久,很多人不敢尝试。你可以用用Php7,本博主博客就是用的php7;