PHP 运算符

PHP 运算符

 

一、前言

 

  能够实现某种运算功能的符号。

  根据不同的功能,可以分为以下几大类:

   1.算术运算符

   2.赋值运算符

   3.字符串运算符

   4.比较运算符

   5.递增/递减运算符

   6.逻辑运算符

   7.位运算符

   8.错误控制运算符

   9.三目运算符

  不同的运算符所对应的的运算数是不同的,单目、双目、三目。一个运算符在进行运算的时候,需要确保运算数是一致的。

 

二、算数运算符

算数运算符

 

除法运算的结果,可能是浮点数,也可能是整数。

在取模运算中,如果有小数,则会去除小数部分。

在取模运算中,结果的正负取决于第一个数。

算数运算符

 

三、赋值运算符

 

 

       赋值运算符就是 =

  $a = ‘php’

  [思考]:$a = ($b = 4) + 5; 这行代码如何理解? $a = 9

  赋值运算表达式的值也就是所赋的值。也就是说,“$a = 3”的值是 3。

  表达式也是有值的。

  有时候我们还将 = 和其它的运算组合到一起,形成组合赋值。

  $a = $a + 5 => $a += 5;

 

四、字符串运算符

 

      字符串运算符只有一个,就是 点 . ,没有加号,

   注意的是,点 和 赋值运算符一起 形成 组成赋值。

字符串运算符

 

五、比较运算符

比较运算符

 

 比较运算符,比较两个运算数的关系,返回的结果是一个布尔值。

 不等有两种写法,!= 和<>

比较运算符

 

比较运算符

 

注意细节:

如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。

=== 和 == 的区别。比如 0 == false 返回真,而0 === false 返回假

比较运算符

 

六、递增递减运算符

 

       ++ 和 --

  根据其位置的不同,又分为前++,前--,后++,后--

  前置和后置的区别?

  不管是前置还是后置,变量的结果是一致的。

  不同的运算的顺序,通过表达式来分析,前置,++$b,是先进行运算,然后再得到值,

  而后置$b++,则是先得到值,然后进行运算。

 

递增递减运算符

 

☞ 注意细节

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

递增递减运算符

 

递增递减运算符

 

七、逻辑运算符

 

逻辑运算符

 

与:两者都为true的情况才为true and

逻辑运算符

或:两者都为false的才为false or

 

逻辑运算符

 

非:非真即假,非假即真,直接取反。 !

异或:xor,如果两者相异,结果为真,两者相同,结果为假。

 

逻辑运算符

 

之所以出现 && 和and 两种运算符,是由于它们的优先级不同。

 

短路运算:

在进行逻辑运算的时候,如果通过第一个参数已经能够确定整个表达式的值,那么就不会进行后面的运算。

 

短路运算

 

对于 与 运算,如果第一个为假,则后面的不会进行计算。

对于 或 运算,如果第一个为真,则后面的不会进行计算

 

真实的代码:

ljysf5.png

 

八、位运算

 

      按位进行运算,

  位,bit,是指二进制表示中的每一个数值。 010101

  字节 Byte,是由位构成的,通常是8 bit 00001010

  1KB = 1024 Byte

  1MB = 1024 KB

  1GB = 1024 MB

  1TB = 1024GB

 

wys.png

       已知$a = 9,$b = -4,分别求: $a & $b, $a | $b, ~$b,$a ^ $b,$a >>2, $b<<2的值。

  位运算都是以二进制的形式来出现的。

  同时要注意,二进制的表示形式有 原码、反码、补码。

  原码:

  将十进制转成的二进制。用最高位表示符号位,0表示正数,1表示负数。

 

位运算

 

       反码:

  对于正数,反码和原码相同

  对于负数,符号位不变,其它位取反。

 

反码

 

      补码:

  对于正数,补码和原码相同

  对于负数,在反码的基础上 + 1。

补码

 

计算机在底层进行运算的时候,是以补码的形式进行的。Why?

 

wys4.png

 

$a & $b $a | $b的过程:

 

位运算

 

Ø 右移:低位溢出,符号位不变,高位用符号位补全 (相当于除以2n 然后取整)

Ø 左移:高位溢出,符号位不变,低位补0 (相当于乘以2n)

$a >> 2 和 $b << 2的运算过程:

 

位运算

 

不管是左移还是右移,它只会改变该数的大小,不改变符号,所以在移位操作的时候,符号位始终是不变的。

在实际编程的时候,经常会用一个位表示一种状态(或一个值)。

 

位运算示例

位运算示例

 

九、错误控制运算符

错误控制运算符

 

我们不期望看到错误,可以使用错误控制运算符进行屏蔽。

不是在每个会出现错误的地方使用这个运算,一般而言,对于我们无法控制的错误,比如去请求其它的资源的时候,可以使用。

☞ 注意细节

@ 运算符只对表达式有效。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。

 

十、三目运算符

 

从名字我们就可以得知,这个运算符有三个运算数。?

从名字我们就可以得知,这个运算符有三个运算数。? :

表达式1 ? 表达式2 : 表达式3

等价于一个简单的if……else语句

If (表达式1){

表达式2

} else {

表达式3

}

 

PHP 三目运算符

 

使用三目运算符可以简化程序。

 

☞ 注意细节

Ø 运算符优先级指定了两个表达式绑定得有多“紧密”。

Ø 同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。

Ø 必要时可以用括号来强制改变优先级。可以增强代码的可读性。

Ø && || 与 and or的区别

Ø 尽管 = 比其它大多数的运算符的优先级低,PHP 仍旧允许类似如下的表达式:if (!$a = foo()),在此例中 foo() 的返回值被赋给了 $a。

如果在编写代码的时候,对于运算比较复杂(运算符较多),可以使用()来改变优先级。

猜你喜欢

转载自caotianyin.iteye.com/blog/2412869