原文:PHP 8: PHP的运算符

本章将介绍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 次(每一次移动都表示“乘以 2”)。

$a >> $b

Shift right(右移)

将 $a 中的位向右移动
$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。

递增/递减运算符

例子

名称

效果

++$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#里的相似。

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

看看一下代码:

   }

看第2行,为什么0会等于“a”呢?奇怪了。之所以会相等,是因为在PHP里,如果整型和字符串比较时,字符串会自动的转化为数值。这里就会有一个问题:字符串转化为数值的原则是什么?原则是

1)如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作
float来求值。否则就被当作整数。

2)该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为
0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字(可选地包括十进制分数),后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字。例如:

          

输出的结果是:

; type:double

现在明白是怎么回事了吧。为什么“a”为0就是这个道理。
既然如此,还有一个“===”,3个等于符号,它表示不仅最后转化的数值相等,而且类型也应该相等。看看下面的代码:

        ?>

输出结果为:

bool(false)
bool(false)
bool(true) 

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

  • 赋值运算符

和C#语言一样,也是利用”=“,也是利用二元符号赋值。例如:

;      //$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 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。反引号位于键盘的”~“键那里。例如:

    ?>

结果为:

 bytes free 
  • 递增/递减运算符

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

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

     递增/递减运算符

    例子 名称 效果
    ++$a 前加 $a 的值加一,然后返回 $a。
    $a++ 后加 返回 $a,然后将 $a 的值加一。
    --$a 前减 $a 的值减一, 然后返回 $a。
    $a-- 后减 返回 $a,然后将 $a 的值减
  • 类型运算符

    PHP 有一个类型运算符:instanceofinstanceof
    用来测定一个给定的对象是否来自指定的对象类。

    instanceof 运算符是 PHP 5 引进的。在此之前用
    is_a(),但是
    is_a() 已经过时了,最好用 instanceof

C#里是is,而Java是instanceof,和PHP一样。例如:

    ?>
  • 字符运算符

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

PHP 8: PHP的运算符的更多相关文章

  1. shell运算符

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用. expr 是一款表达式计算工具,使用它能完成表达式的求值操作. #!/bin/bash v ...

  2. SQL Server-聚焦APPLY运算符(二十七)

    前言 其实有些新的特性在SQL Server早就已经出现过,但是若非系统的去学习数据库你会发现在实际项目中别人的SQL其实是比较复杂的,其实利用新的SQL Server语法会更加方便和简洁,从本节开始 ...

  3. java中的移位运算符:<<,>>,>>>总结

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  4. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  5. .NET 基础 一步步 一幕幕[运算符、占位符、转义符]

      运算符.占位符.转义符 好吧,在五局全胜之后,终于升到了三个钻,距离一个星星还有一大段距离,忽然想起来今天的博客还没写,果断坑队友,来写博客了....感觉以后还是每天更新一篇比较好.要不晚上就该熬 ...

  6. ECMASCript2015 提案 stage-3的对象展开运算符

    看源码时看到如下的代码 export default { //通过mapActions将actions映射到methods里 methods: { ...mapActions([ 'updateSta ...

  7. JavaScript权威设计--JavaScript表达式与运算符,语句(简要学习笔记六)

    1.delete是一元操作符,用来删除对象属性或者元素. var a={ x:1, y:2 } delete a.x; //删除x属性 “x”in a //false:a对象中已经不存在x属性 ale ...

  8. JavaScript权威设计--JavaScript表达式与运算符(简要学习笔记五)

    1.3种原始表达式     1.直接量:    1.23    //数字直接量                         “hello”    //字符串直接量                 ...

  9. LINQ to SQL语句(18)之运算符转换

    运算符转换 1.AsEnumerable:将类型转换为泛型 IEnumerable 使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数.在 ...

  10. El表达式的关系运算符

    El表达式的关系运算符: ==  对应  eq !=   对应  ne >    对应  gt <    对应  It

随机推荐

  1. 十二周项目三(4)——出口fibnacci第一序列20的数量

    /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名:test.cpp * 作者:陈丹妮 * 完毕日期:2014年 11 月 ...

  2. 一起写2048(160行python代码)

    前言: Life is short ,you need python. --Bruce Eckel 我与2048的缘,不是缘于一个玩家.而是一次,一次,重新的ACM比赛.四月份校赛初赛,第一次碰到20 ...

  3. OpenCV2学习笔记(十四):基于OpenCV卡通图片处理

    得知OpenCV有一段时间.除了研究的各种算法的内容.除了从备用,据导游书籍和资料,尝试结合链接的图像处理算法和日常生活,第一桌面上(随着摄像头)完成了一系列的视频流处理功能.开发平台Qt5.3.2+ ...

  4. ASP.NET MVC4实现URL伪静态

    1.在Web.config添加节点配置: <system.webServer> <modules runAllManagedModulesForAllRequests="t ...

  5. eclipse android ndk 提示Type 'JNIEnv' could not be resolved 等信息解决办法

    新配置完eclipse c++ android ndk 环境后,导入项目提示以下信息 是由于没有将jni.h导入的缘故,而这个文件在ndk的目录下面.所以,参照以下步骤:Project Propert ...

  6. 使用Eclipse设定Android开发环境

    使用Eclipse设定Android开发环境 花了大概几天的时间最终搭建好了开发Android的环境了! 我是使用Eclipse +ADT顺利地搭建Android开发环境的. 如今Google以及An ...

  7. Ajax基础知识(一)

    随便在百度谷歌上输入Ajax都会出现一大堆的搜索结果,这已经不再是什么新奇的技术了.但若从一开始就学习了ASP.Net,使用功能齐全的Visual Studio集成开发工具,或许未必能对访问一个动态网 ...

  8. twitter接口开发

    前一阵子研究了下twitter接口,发现网上的资料不是很多.遂花了些心血,终于有所收获~ 现在有时间赶紧整理出来便于自己以后查阅,也想帮助有困难的同学们.废话不多说,现在就以最简洁的方式开始了.注意: ...

  9. MvcMailer通过ASP.NET MVC Razor视图和基架发送邮件

    MvcMailer是一个有趣的组件,您可以使用ASP.NET MVC框架在发送邮件.很重要的是,它使用Razor视图引擎的观点作为电子邮件模板和很容易安装和使用.在本文中你将看到如何安装,设置邮件模板 ...

  10. 微信JS-SDK使用权限签名算法的服务端实现(.net版本)

    原文:微信JS-SDK使用权限签名算法的服务端实现(.net版本) 一.概要 微信此次开放JS接口,开放了一大批api权限,即使在未认证的订阅号也可以使用图像接口,音频接口,智能接口,地理位置,界面操 ...