PHP 8: PHP的运算符

原文: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#里的相似。

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

看看一下代码:

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

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

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

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

现在明白是怎么回事了吧。为什么“a”为0就是这个道理。
既然如此,还有一个“===”,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)看看逻辑运算,“或”和“与”居然有2种写法,如果你使用C/C++,C#,Java等语言的话,就用“&&"或”||"吧。如果你是VB的话,就用and,和or。当然你也可以2种都用。它们有什么区别呢?优先级的不同而已。”&&“与"||"比”and“和”or“优先级要高。
  4).PHP多了一个数组运算符。有了上面的解释,相信它们不是很难了。

  • 赋值运算符

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

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

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 有一个类型运算符:instanceofinstanceof
    用来测定一个给定的对象是否来自指定的对象类。

    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 ?>

  • 字符运算符

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

时间: 2024-10-25 03:15:22

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

java中的三元运算符详解

最近在带领实习生中遇到很多新手问与三元运算符有关的java题目,多数为代码结果题,少数为应用题.鉴于很多资料上对于java三元运算的讲解过于简单,网上的资料与题目也不是很完善,对于结果答案分析不一,故在此总结,当然仅为个人观点,水平有限,不足之处,还请大家多多指出,互相交流学习. 什么是java三元运算符呢?无疑其操作元有三个,第一个是条件表达式,剩余两个为值,条件表达式为真时运算取第一个值,为假时取第二个值. 其示例代码如下:boolean a = 20 < 45 ? true : false

Mysql运算符与函数(胖胖老师)

use test;create table `employee`(    emp_no int unsigned,    emp_name varchar(30),    emp_sex varchar(3),    emp_age tinyint unsigned,    sal double,    history datetime);insert into employee values(1, '张三', '男', 18, 5000, '2012-04-23'),(2, '李四', '男'

MySQL数据库中的算术运算符

MySQL数据库中的算数运算符 MySQL数据库中的算术运算符 一.运算符的概述: 运算符在MySQL数据库中也是很重要的知识体,在执行sql语句的时候这个运算符对操作数据帮助很大.其中运算符的运用可以帮助你减省大量的时间,操作起来也比较灵活. 二.运算符 运算符主要包括"算数运算符"."比较运算符"."罗运算符"."位运算符"四大类,下面我们就一次学习一下. 1.算术运算符 算术运算符在sql语句的时候经常使用,例如对表的字

重载&gt;&gt;运算符

#include <iostream>   #include <stdio.h>   using namespace std;   class Input   {       public:          //实际重载是右移运算符          Input & operator >> (int &a)          {              scanf("%d",&a);              fflush

JS中的运算符&amp;JS中的分支结构

一.JS中的运算符 1.算术运算(单目运算符) + 加.- 减.* 乘./ 除.% 取余.++ 自增.-- 自减 >>> +:有两种作用,连接字符串/加法运算.当+两边全为数字时,进行加法运算: 当+两边有任意一边为字符串时,起连接字符串的作用,连接之后的结果为字符串 除+外,其余符号运算时,会先尝试将左右变量用Number函数转为数字 >>> /: 结果会保留小数点 >>> ++: 自增运算符,将变量在原有基础上+1: --: 自减运算符,将变量在原

java基础语言 运算符

/* ++,--运算符的使用: 单独使用: 放在操作数的前面和后面效果一样.(这种用法是我们比较常见的) 参与运算使用: 放在操作数的前面,先自增或者自减,然后再参与运算. 放在操作数的后面,先参与运算,再自增或者自减. 作用:就是对变量进行自增1或者自减1. */ public class Text3 { public static void main(String[] args) { //定义两个变量 int x = 3; int y = 4; //单独使用 //x++; //y--; ++

集合和三元运算符

一.三元运算符 如下判断可以使用三元运算更方便的实现: a = 1b = 2 if a > 1: c = aelse: c = b 和下面是一样的: a = 1b = 2#下面这个c = a if a>1 else b 如下两种方法也是一样的:方式一: s=[]nums = list(range(1,11))for i in nums: if i%2==0: s.append(i)print(s)方式二:ss = [i for i in nums if i%2==0]print(ss)#这两种

2_C语言中的数据类型 (八)运算符

1          运算符表达式和语句 1.1       基本运算符 1.1.1          = 数据对象:泛指数据在内存的存储区域 左值:表示可以被更改的数据对象 右值:能赋给左值的量 1.1.2          + 加 1.1.3          – 减 1.1.4          * 乘 1.1.5          / 除 1.1.6          % 取余数 1.1.7          += 加等于 1.1.8          -= 减等于 1.1.9     

(17)Powershell中的重定向运算符

默认情况下,Powershell 把输出发送到屏幕显示.但是,Powershell也可以将输出重定向至一个文本文件,或将错误输出重定向至常规输出流. 重定向运算符有什么用 ? 重定向运算符意味着我们可以将命令的输出信息输出到指定的文件,完全满足脚本中的log的要求,即可以利用重定向打印脚本或命令执行的详细信息. Powershell 中有以下重定向运算符. 运算符 说明 示例 > 将输出发送到指定文件. PS D:\> Get-Process > process.txt >>

(18)Powershell中的字符串拆分运算符

Powershell中提供了对字符串的拆分操作运算符.-split 运算符将一个字符串拆分成多个字符串. 拆分运算符 拆分运算符用于将一个或多个字符串拆分为多个子字符串.可更改拆分操作的以下元素: (1)定界符.默认为空白,但是可指定字符.字符串.模式或用于设置定界符的脚本块. (2)子字符串的最大数目.默认设置为返回所有子字符串.如果指定的数字小于子字符串数,则其余子字符串将合并到最后一个子字符串中. (3)用于指定定界符匹配条件的选项,如 SimpleMatch 和 Multiline. 拆