设为首页 收藏本站
查看: 986|回复: 0

[经验分享] PHP 8: PHP的运算符

[复制链接]

尚未签到

发表于 2015-8-24 15:05:49 | 显示全部楼层 |阅读模式
本章将介绍PHP的运算符。
运算符这个问题在每种语言里都有,因为我们已经熟悉了编程语言里的一种或是多种,所以只需要了解一下就行了。
概括一下吧。
PHP运算符有很多种,看样子要比C/C++,C#等语言多多了。分别是:

  • 算术运算符
  • 赋值运算符
  • 位运算符
  • 比较运算符
  • 错误控制运算符
  • 执行运算符
  • 递增/递减运算符
  • 逻辑运算符
  • 字符串运算符
  • 数组运算符
  • 类型运算符
这也是蛮多的,五花八门的。
算术运算符

例子

名称

结果

-$a

取反

$a 的负值。

$a + $b

加法

$a 和 $b 的和。

$a - $b

减法

$a 和 $b 的差。

$a * $b

乘法

$a 和 $b 的积。

$a / $b

除法

$a 除以 $b 的商。

$a % $b

取模

$a 除以 $b 的余数。

位运算符

例子

名称

结果

$a & $b

And(按位与)

将把 $a 和 $b 中都为 1 的位设为 1。

$a | $b

Or(按位或)

将把 $a 或者 $b 中为 1 的位设为 1。

$a ^ $b

Xor(按位异或)

将把 $a 和 $b 中不同的位设为 1。

~ $a

Not(按位非)

将 $a 中为 0 的位设为 1,反之亦然。

$a << $b

Shift left(左移)

将 $a 中的位向左移动$b 次(每一次移动都表示&#8220;乘以 2&#8221;)。

$a >> $b

Shift right(右移)

将 $a 中的位向右移动$b 次(每一次移动都表示&#8220;除以 2&#8221;)。

比较运算符

例子

名称

结果

$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。

递增/递减运算符

例子

名称

效果

++$a

前加

$a 的值加一,然后返回 $a。

$a++

后加

返回 $a,然后将 $a 的值加一。

--$a

前减

$a 的值减一, 然后返回 $a。

$a--

后减

返回 $a,然后将 $a 的值减一。

逻辑运算符

例子

名称

结果

$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

数组运算符

例子

名称

结果

$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

当然还有几种类型的没有列出,将在后面描述。我们先看看列出的吧。
如果没有对上面的运算符做特殊说明,那么说明它们和C#里的相似。

  • 首先看看位运算里的左移(<<)或右移(>>),其实没有什么不同,只是符号不一样而已。
  • 看看比较运算法里的&#8220;==&#8221;,&#8220;===&#8221;,这两个比较有意思,它们有什么区别呢?
            看看一下代码:            

1 <?php
2 var_dump(0 == "a"); // 0 == 0 -> true
3 var_dump("1" == "01"); // 1 == 1 -> true
4
5 switch ("a") {
6 case 0:
7    echo "0";
8    break;
9 case "a": // never reached because "a" is already matched with 0
10    echo "a";
11    break;
12 }         看第2行,为什么0会等于&#8220;a&#8221;呢?奇怪了。之所以会相等,是因为在PHP里,如果整型和字符串比较时,字符串会自动的转化为数值。这里就会有一个问题:字符串转化为数值的原则是什么?原则是  1)如果包括&#8220;.&#8221;,&#8220;e&#8221;或&#8220;E&#8221;其中任何一个字符的话,字符串被当作float 来求值。否则就被当作整数。
  2)该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字(可选地包括十进制分数),后面跟着可选的指数。指数是一个&#8220;e&#8221;或者&#8220;E&#8221;后面跟着一个或多个数字。例如:
  

1 <?php
2 $var = 1 + "10.5";               
3 echo "1 + \"10.5\"=".$var."; type:".gettype($var)."<Br>";
4 $var = 1 + "-1.3e3";              
5 echo "1 + \"-1.3e3\"=".$var."; type:".gettype($var)."<Br>";
6 $var = 1 + "bob-1.3e3";         
7 echo "1 + \"bob-1.3e3\"=".$var."; type:".gettype($var)."<Br>";
8 $var = 1 + "bob3";               
9 echo "1 + \"bob3\"=".$var."; type:".gettype($var)."<Br>";
10 $var = 1 + "10 beatiful birds";      
11 echo "1 + \"10 beatiful birds\"=".$var."; type:".gettype($var)."<Br>";
12 $var= 4 + "10.2 Little Apple";
13 echo "4 + \"10.2 Little Apple\"=".$var."; type:".gettype($var)."<Br>";
14 $var = "10.0 pigs " + 1;         
15 echo "\"10.0 pigs \" + 1=".$var."; type:".gettype($var)."<Br>";
16 $var = "10.0 pigs " + 1.0;        
17 echo  "\"10.0 pigs \" + 1.0=".$var."; type:".gettype($var)."<Br>";
18 ?>
19   
输出的结果是:

1 + "10.5"=11.5; type:double
1 + "-1.3e3"=-1299; type:double
1 + "bob-1.3e3"=1; type:integer
1 + "bob3"=1; type:integer
1 + "10 beatiful birds"=11; type:integer
4 + "10.2 Little Apple"=14.2; type:double
"10.0 pigs " + 1=11; type:double
"10.0 pigs " + 1.0=11; type:double现在明白是怎么回事了吧。为什么&#8220;a&#8221;为0就是这个道理。
既然如此,还有一个&#8220;===&#8221;,3个等于符号,它表示不仅最后转化的数值相等,而且类型也应该相等。看看下面的代码:
1 <?php
2  var_dump(0 === "a"); // 0 === 0 -> false
3  echo '<br>';
4  var_dump(0 === "00"); // 0 === "00" -> false
5  echo '<br>';
6  var_dump(0 === 0); // 0 === 0 -> true
7  echo '<br>';
8 ?>输出结果为:

bool(false)
bool(false)
bool(true) 第6行之所以为true,是因为它们不仅数值相等,而且类型也一样。
   3)看看逻辑运算,&#8220;或&#8221;和&#8220;与&#8221;居然有2种写法,如果你使用C/C++,C#,Java等语言的话,就用&#8220;&&"或&#8221;||"吧。如果你是VB的话,就用and,和or。当然你也可以2种都用。它们有什么区别呢?优先级的不同而已。&#8221;&&&#8220;与"||"比&#8221;and&#8220;和&#8221;or&#8220;优先级要高。
  4).PHP多了一个数组运算符。有了上面的解释,相信它们不是很难了。  

  • 赋值运算符
           和C#语言一样,也是利用&#8221;=&#8220;,也是利用二元符号赋值。例如:

<?php
$a='hello'; //$a是hello。
$a+=1;      //$a是1,二元赋值符
$b='world';
$c='hello';
$c.=$b;//$c是"hello world"
?>

  • 错误执行运算符
       PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉。  如果激活了 track_errors特性,表达式所产生的任何错误信息都被存放在变量$php_errormsg中。此变量在每次出错时都会被覆盖,所以如果想用它的话就要尽早检查。例如:

<?php
/* Intentional file error */
$my_file = @file ('non_existent_file') or
   die ("Failed opening file: error was '$php_errormsg'");

// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.

?>   

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

1 <?php
2  $out=`dir c:`;
3  echo '<pre>'.$out.'</pre>';
4 ?>结果为:

Volume in drive C has no label.
Volume Serial Number is A019-7D77

Directory of C:\

02/24/2006  10:21 PM  Downloads
02/24/2006 10:09 PM Kingsoft Temp Download
05/13/2006 07:07 PM 220 cmd.txt
02/13/2006 11:40 PM WINDOWS
02/13/2006 11:47 PM Documents and Settings
02/13/2006 11:57 PM Program Files
06/24/2006 11:01 PM 482,933 nfzmLog.log
05/11/2006 10:28 PM  Inetpub
05/13/2006 07:07 PM 4 response.txt
07/29/2006 05:56 PM 0 Rec.pcm
06/24/2006 09:05 PM nf
07/29/2006 05:56 PM 0 WriteAudrv.wav
07/04/2006 08:52 PM dwnSetup
07/08/2006 09:28 AM TEMP
02/14/2006 12:15 AM NVIDIA
5 File(s) 483,157 bytes 10 Dir(s) 2,116,558,848 bytes free


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

      注: 递增/递减运算符不影响布尔值。递减NULL 值也没有效果,但是递增 NULL 的结果是 1。
      递增/递减运算符
    例子名称效果++$a前加$a 的值加一,然后返回 $a。$a++后加返回 $a,然后将 $a 的值加一。--$a前减$a 的值减一, 然后返回 $a。$a--后减返回 $a,然后将 $a 的值减
  • 类型运算符
      PHP 有一个类型运算符:instanceof。instanceof用来测定一个给定的对象是否来自指定的对象类。
      instanceof 运算符是 PHP 5 引进的。在此之前用is_a(),但是is_a() 已经过时了,最好用 instanceof。
          C#里是is,而Java是instanceof,和PHP一样。例如:

1 <?php
2 class A { }
3 class B { }
4
5 $thing = new A;
6
7 if ($thing instanceof A) {
8     echo 'A';
9 }
10 if ($thing instanceof B) {
11     echo 'B';
12 }
13 ?>

  • 字符运算符
有两个字符串运算符。第一个是连接运算符(&#8220;.&#8221;),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(&#8220;.=&#8221;),它将右边参数附加到左边的参数后。这些在前面已经见到,就不举例了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103604-1-1.html 上篇帖子: 黄聪:Jquery+php+ajax实现表单异步提交,动态添加回复评论 下篇帖子: PHP 5:PHP语法导向
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表