当你的才华
还撑不起你的野心时
那你就应该静下心来学习
目录
常见算术运算符包括
赋值运算符
位运算符
比较运算符
错误控制运算符
执行运算符
递增(减)运算符
逻辑运算符
字符串运算符
数组运算符
PHP7 新增操作符
$a
,取反$a + $b
,加法,a 和a和b 的和$a - $b
,减法,a 和a和b 的差$a * $b
,乘法,a 和a和b 的积$a / $b
,除法,a 和a和b 的商$a % $b
,取余,a 除以a除以b 的余数$a ** $b
,乘方,a 的a的b 次方创建cetest29.php
执行成功后:
可以看出
基本的赋值运算符是 =
,意味着把右边表达式的值赋给左边的运算数。
赋值运算表达式的值也就是所赋的值。也就是说,$a = 3 的值是 3
这样就可以做一些小技巧:
创建cetest30.ph ,接下来几个代码我都会用这个文件修改以下,然后运行
执行结果:
对于数组 array,对有名字的键赋值是用 =>
运算符。此运算符的优先级和其它赋值运算符相同
1, 'b' => 3 * 4];
在基本赋值运算符之外,还有适合于所有二元算术,数组集合和字符串运算符的组合运算符
,这样可以在一个表达式中使用它的值并把表达式的结果赋给它,例如:
执行结果:
注意赋值运算将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。这也适合于在密集循环中拷贝一些值例如大数组。
引用赋值
PHP 支持引用赋值,引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西。
创建cetest31.php
执行结果,可以看到引用赋值会改变原值,传值赋值则不会:
位运算符允许对整型数中指定的位进行求值和操作。
$a & $b
,And(按位与),将把 a 和a和b 中都为 1 的位设为 1。$a | $b
,Or(按位或),将把 a 和a和b 中任何一个为 1 的位设为 1。$a ^ $b
,Xor(按位异或),将把 a 和a和b 中一个为 1 另一个为 0 的位设为 1。~$a
,Not(按位取反),将 $a 中为 0 的位设为 1,反之亦然。$a << $b
,Shift left(左移),将 a 中的位向左移动a中的位向左移动b 次(每一次移动都表示乘以 2)。$a >> $b
,Shift right(右移),将 a 中的位向右移动a中的位向右移动b 次(每一次移动都表示除以 2)。Example 1 整数的 AND,OR 和 XOR 位运算符
我们通过网上的实例的来看看:
创建cetest32.php
执行结果:
比较运算符,如同它们名称所暗示的,允许对两个值进行比较。
$a == $b
,如果类型转换后 a 等于a等于b,返回 TRUE。$a === $b
,如果 a 等于a等于b,并且它们的类型也相同,返回 TRUE。$a != $b
,如果类型转换后 a 不等于a不等于b,返回 TRUE。$a <> $b
,等同于 !=
$a !== $b
,如果 a 和a和b 的值或类型不同,返回 TRUE。$a < $b
,如果 a 严格小于a严格小于b,返回 TRUE。$a > $b
,如果 a 严格大于a严格大于b,返回 TRUE。$a <= $b
,如果 a 小于或者等于a小于或者等于b,返回 TRUE。$a >= $b
,如果 a 大于或者等于a大于或者等于b,返回 TRUE。如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。
创建cetest33.php
false);
var_dump(0 == "a");
var_dump("1" == "01");
var_dump("10" == "1e1");
var_dump(100 == "1e2");
var_dump([4,5] < [1,2,3]);
var_dump((object)"Test" > "Test");
var_dump((object)"Test" > [2,3]);
switch ("a") {
case 0:
echo "0";
break;
case "a":
echo "a";
break;
}
从结果可以看出
PHP 支持一个错误控制运算符:\@
。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
错误控制运算符只对表达式有效。对新手来说一个简单的规则就是:
\@
运算符。例如,可以把它放在变量,函数和 include 调用,常量,等等之前。注意:目前的 \@
错误控制运算符前缀甚至使导致脚本终止的严重错误的错误报告也失效。这意味着如果在某个不存在或者敲错了字母的函数调用前用了 \@
来抑制错误信息,那脚本会没有任何迹象显示原因而死在那里。
PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。
$output
";
执行结果:
注意,反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。
常见递增(减)运算符
++$a
,a 的值加一返回a的值加一返回a。$a++
,返回 a,然后将a,然后将a 的值加一。--$a
,a 的值减一返回a的值减一返回a。$a--
,返回 a,然后将a,然后将a 的值减一。递增(减)运算符对布尔和 NULL 类型的影响
执行结果,可看到布尔值不受影响,NULL 递增为 1,递减为 0:
实例:
执行结果:
从结果可知,在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。
例如:
$a = 'Z';
// Perl 中
$a++;//将把 $a 变成'AA'
//C 中
$a++;//将把 $a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)
注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增(减)其他字符变量则无效,原字符串没有变化。
常见逻辑运算符
$a and $b
,逻辑与,如果 a 和a和b 都为 TRUE$a && $b
,逻辑与,如果 a 和a和b 都为 TRUE,其中 &&
优先级高于 and
$a or $b
,逻辑或,如果 a 或a或b 任一为 TRUE$a || $b
,逻辑或,如果 a 或a或b 任一为 TRUE,||
优先级高于 or
$a xor $b
,逻辑异或,如果 a 或a或b 任一为 TRUE,但不同时是,则返回 TRUE! $a
,逻辑非,如果 $a 不为 TRUE
执行结果:
从结果可知
foo()
虽然没有定义,但是并没有机会执行,因为之前的表达式已经确定结果,foo()
被短路。&&
,||
的优先级高于 =
,=
的优先级高于 and
,or
。有两个字符串运算符。
.
,它返回其左右参数连接后的字符串.=
,它将右边参数附加到左边的参数后。
常见数组运算符
$a + $b
,a 和a和b 的联合$a == $b
,a 和a和b 键和值都相同则为 TRUE$a === $b
,a 和a和b 键和值且顺序和类型都相同返回 TRUE$a != $b
,a 和a和b 中键或值不同返回 TRUE$a <> $b
,等同于 !=$a !== $b
,a 和a和b 中键,值,顺序或类型,其中一个不相同则返回 TRUE "apple", "b" => "banana"];
$b = ["a" => "pear", "b" => "strawberry", "c" => "cherry"];
$c = ["b" => "banana", "a" => "apple"];
var_dump($a + $b, $b + $a);
var_dump($a == $c, $a === $c);
执行结果:
从结果可以看出
+
运算符把右边的数组元素(除去键值与左边的数组元素相同的那些元素)附加到左边的数组后面,但是重复的键值不会被覆盖。===
,需要数组的键,值,类型和顺序都相同,才返回 TRUE。
组合比较符
太空船操作符使用 <=>
表示,用于比较两个表达式。当 a 小于、等于或大于a小于、等于或大于b 时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。
1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// 浮点数
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
NULL合并运算符
NULL 合并运算符使用 ??
表示,意味着如果 ??
之前的变量存在且值不为 NULL,它就会返回自身的值,否则返回 ??
后的操作数。
合并运算符通常可用三元运算符作为替换,多个合并运算符的优先级从左到右一次执行。
参考链接:https://www.shiyanlou.com/courses/23
我不需要自由,只想背着她的梦
一步步向前走,她给的永远不重