运算符
比较运算符
其实编程语言中的运算符与我们从小学的数学中的运算符大致是相通的。在数学中,我们比较两个数的大小时会用到大于(>)小于(<),同样在编程语言中也是如此。
例:
<?php
$a = 5;
$b = 4;
// $a > $b 此时$a 大于 $b 那结果就是true
var_dump($a > $b,"a = " . $a,"b = " . $b);
// 我们将$b的值加2,此时$b = 4 + 2 = 6
$b = $b + 2;
// $a > $b 此时$a 不大于 $b 那结果就是false
var_dump($a > $b,"a = " . $a,"b = " . $b);
运行结果:
我们由上可以看出,在进行大于小于运算时,程序返回的结果其实是一个布尔型。当然,不只是大于小于,以下这些运算符在进行运算时都会返回布尔型值。
运算符
名称
描述
==
等于(松散比较)
如果 x 等于 y,则返回 true
===
绝对等于(严格比较)
如果 x 等于 y,且它们类型相同,则返回 true
!=
不等于(松散比较)
如果 x 不等于 y,则返回 true
<>
不等于(松散比较)
如果 x 不等于 y,则返回 true
!==
不绝对等于(严格比较)
如果 x 不等于 y,或它们类型不相同,则返回 true
>
大于(松散比较)
如果 x 大于 y,则返回 true
<
小于(松散比较)
如果 x 小于 y,则返回 true
>=
大于等于(松散比较)
如果 x 大于或者等于 y,则返回 true
<=
小于等于(松散比较)
如果 x 小于或者等于 y,则返回 true
注意:虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。
- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
例:
<?php
$a = 5;
$b = '5';
// 松散比较 等于 只比较值
var_dump($a == $b);
// 严格比较 全等于 除比较值还会比较类型,只有类型和值都一致,才会返回true
var_dump($a === $b);
// 松散比较 不等于
var_dump($a != $b);
// 严格比较 不全等于
var_dump($a !== $b);
运行结果:
算术运算符
算术运算符,顾名思义就是对两个变量或表达式进行运算操作时要用到的操作符。大多数运算符其实也和我们数学中的运算符一致。比如数学中数字的相加用加号(+),数字的相减用减号(-)...等等。
运算符
名称
描述
加
求和
-
减
求差
*
乘
求积
/
除
求除
%
取余
求余数
.
字符连接符
将两个字符拼接
-x
取负相当于 0 - x (零减X)
取负
~
取反
取反
以上之中,我们平常开发最常使用的就是字符连接符和加减乘除余,其余的都不常使用。
例:
<?php
$a = 5;
$b = '5';
$c = 'a';
// 在对两个变量进行运算时,虽然PHP是弱类型语言,但也需要注意以下情况的出现
var_dump($a + $b);// 整型与字符串型数字相加。PHP允许
var_dump($a + $c);// 整型与字符串相加。PHP不允许
var_dump($b + $c);// 字符串相加。PHP不允许
运行结果
注意:在第二个var_dump()函数执行时,PHP抛出的语法错误,这是一个致命错误,在出现这个错误后,程序就会立马中止不再继续往下执行。
赋值运算符
在 PHP 中,基本的赋值运算符是 =。它意味着左操作数被设置为右侧表达式的值。也就是说,$x = 5 的值是 5。
运算符
名称
描述
=
等于
x = y左操作数被设置为右侧表达式的值
+=
加等于
x+=y等同于x = x + y
-=
减等于
*=
乘等于
/=
除等于
%=
取余等于
.=
点等于
a .= b 等同于 a = a.b
赋值运算符其实与上面的算术运算符的基本概念差不多,都是对变量或表达式的运算。只是赋值运算符的计算结果会继续赋值给变量自己本身。
例:
<?php
$a = 15;
$a += 1;
var_dump($a);
$b = 10;
$b -= 5;
var_dump($b);
$c = 10;
$c /= 10;
var_dump($c);
$str = "hello";
$str .= " world";
var_dump($str);
运行结果:
递增/递减预算符
运算符
名称
描述
++x
预递增
x加1,然后返回x
x++
后递增
返回x,然后x加1
--x
预递减
x减1,然后返回x
x--
后递减
返回x,然后x减1
例:
<?php
$x=10;
echo "x=" . ++$x." ";
echo "x=" . ++$x." ";
$y=10;
echo "y=" . $y++." ";
echo "y=" . $y++." ";
$z=5;
echo "z=" . --$z." ";
echo "z=" . --$z." ";
$i=5;
echo "i=" . $i--." ";
echo "i=" . $i--." ";
运行结果:
逻辑运算符
运算符
名称
描述
x && y
与
x和y都为true,则返回true
x || y
或
x和y至少有一个true,则返回true
!x
非
x不为true,则返回true
x and y
与(慎用)
x和y都为true,则返回true
x or y
或(慎用)
x和y至少有一个true,则返回true
x xor y
异或(慎用)
x和y有且只有一个true,则返回true
例:
<?php
$x = 1;// 相当于布尔型 true
$y = 0;// 相当于布尔型 false
$a = $y or $x; // or优先级低于 = 所以相当于 $a = $y
$b = $y || $x;
var_dump($a,$b);
$c = $y and $x;// and优先级低于 = 所以相当于 $c = $y
$d = $x && $y;
var_dump($c,$d);
运算结果:
注意:大多数时候,我们并不提倡使用and、or、xor来进行逻辑运算。
三元运算符
另一个条件运算符是"?:"(或三元)运算符。
例:
<?php
$x = 10;
// 如果 x>11 条件成立,则返回true,否则返回false
$a = $x > 11 ? true : false;
var_dump($a);
$b = $x > 11 ?: false;
var_dump($b);
$z = 12;
// 如果 x>11 条件成立,则返回true,否则返回false
$a = $z > 11 ? true : false;
var_dump($a);
$b = $z > 11 ?: false;
var_dump($b);
运行结果:
组合运算符
PHP7+ 支持组合比较符,也称之为太空船操作符,符号为 。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
例:
<?php
$a = 1;
$b = 2;
$c = $a <=> $b; // 组合运算符的使用
var_dump($c); // $a < $b 时 $c = -1
$a = 3;
$c = $a <=> $b; // 组合运算符的使用
var_dump($c); // $a > $b 时 $c = 1
$a = 2;
$c = $a <=> $b; // 组合运算符的使用
var_dump($c);// $a == $b 时 $c = 0
运算结果:
规则如下:
- 如果 b, 则 $c 的值为 1。
- 如果 b, 则 $c 的值为 0。
- 如果 b, 则 $c 的值为 -1。
在没有太空船运算符的时候,我们只能这样写代码:
<?php
$c = $a > $b ? 1 : ( $a==$b ? 0 : -1 );
运算符优先级
记住一句口诀即可:
括(号)、单(操作数)、算(术)、移(位)、关(系);位(运算符)、逻(辑)、条(件)、赋(值)、逗(号)。
多数时候,与我们数学中的逻辑运算的优先级是一致的。
类型比较
虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。
- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
(水一段,哈哈哈!)
只要我们弄明白PHP的数据类型,再加上对PHP弱类型语言的理解。在我们对变量类型进行比较时也就得心应手了。我们要知道标量数据类型和数组的空值或零值以及Null,它们都是等同于布尔值false的,当然这是松散比较后的结果。
例:
<?php
var_dump(null == false); // true
var_dump(null === false); // false
var_dump(0 == false); // true
var_dump(0 === false); // false
var_dump('' == false); // true
var_dump('' === false); // false
var_dump([] == false); // true
var_dump([] === false); // false
class User {}
var_dump(new User() == false); // false
var_dump(new User());
运行结果:
关于PHP运算符的知识点可能还有没谈及到的地方,但实际上已经足够满足我们大部分日常开发。对于运算符的使用,在开发中是比较频繁的。我们需要牢记相关运算符的优先级以及它们的使用规则,这样我们才能事半功倍。
从下节开始我们将会开始写更多的代码,如果你还不知道代码编辑器等相关的安装和使用,可以关注下GZH:程序员菜菜,里面有编辑器相关安装和使用教程。