[Day7]PHP运算符02

PHP运算符

赋值运算符

基本的赋值运算符是“=”。一开始可能会以为它是“等於”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数

下图为算术赋值运算符

例子 等同於 操作
$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 指数

下图为其他赋值运算符

例子 等同於 操作
$a .= $b $a = $a . $b 字符串拼接
$a ?? $b $a = $a ?? $b NULL合并

位元运算

位运算符允许对整型数中指定的位进行求值和操作。

下图为位元运算符号

例子 名称 结果
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
$a | $b Or(按位或) 将把 $a 和 $b 中任何一个为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 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,并且它们的类型也相同。
$a != $b 不等於 true,如果类型转换後 $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,如果 $a 小於或者等於 $b。
$a >= $b 大於等於 true,如果 $a 大於或者等於 $b。
$a <=> $b 太空船运算符(组合比较符) 当$a小於、等於、大於 $b时 分别返回一个小於、等於、大於0的 int 值。

执行运算符

PHP 支持一个执行运算符:反引号(``)。注意这不是单引号! PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。

<?php
$output = `ipconfig /all`;
echo "<pre>$output</pre>"; // 输出所有IP资讯
?>

递增/递减运算符

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

例子 名称 效果
++$a 先加 $a 的值加一,然後返回 $a。
$a++ 後加 返回 $a,然後将 $a 的值加一。
--$a 先减 $a 的值减一, 然后返回 $a。
$a-- 後减 返回 $a,然後将 $a 的值减一。

简易的范例

<?php
echo "後增量(PostIncrement)\n";
$a = 5;
echo "Should be 5: " . $a++ . "<br />\n";
echo "Should be 6: " . $a . "<br />\n";

echo "先增量(PreIncrement)\n";
$a = 5;
echo "Should be 6: " . ++$a . "<br />\n";
echo "Should be 6: " . $a . "<br />\n";

echo "後减(PostDecrement)\n";
$a = 5;
echo "Should be 5: " . $a-- . "<br />\n";
echo "Should be 4: " . $a . "<br />\n";

echo "先减(Predecrement)\n";
$a = 5;
echo "Should be 4: " . --$a . "<br />\n";
echo "Should be 4: " . $a . "<br />\n";
?>

逻辑运算符

例子 名称 结果
$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。

字符串运算符

有两个字符串(string)运算符。第一个是连接运算符(“.”),它返回其左右参数连接後的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数之後。

范例程序码

<?php
$a = "Hello ";
$b = $a . "World!";
echo $b."\n"; // output "Hello World!"

$a = "Hello ";
$a .= "World!";     // output "Hello World!"
echo $a;
?>

数组运算符

例子 名称 结果
$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。

如果是运用运算符将数组相加,会把加号右边的附加到加号左边数组,
两个数组中都有的键名,则只用左边数组中的,右边的被忽略

以下简单范例示范:

<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");

$c = $a + $b; // Union of $a and $b
var_dump($c);

$c = $b + $a; // Union of $b and $a
var_dump($c);

// 输出:
// array(3) {
//   ["a"]=>
//   string(5) "apple"
//   ["b"]=>
//   string(6) "banana"
//   ["c"]=>
//   string(6) "cherry"
// }

// array(3) {
//   ["a"]=>
//   string(4) "pear"
//   ["b"]=>
//   string(10) "strawberry"
//   ["c"]=>
//   string(6) "cherry"
// }
?>

以下示范比较数组

<?php
$a = array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");

var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>

类型运算符

instanceof 方法用於确定一个 PHP 变数是否属於某一类 class 的实例,
也可以用来确认某一个变数,是否继承自某一父类或子类的实例。

以下范例

<?php
class MyClass
{
}

class NotMyClass
{
}
$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>

// 输出
// bool(True)
// bool(False)

资料来源: https://www.php.net/


<<:  Day 08 CSS样式改动及资料绑定详述

>>:  Day 3 Compose UI Hello World

[Day28] Advanced Watcher

昨天发现 Threshold Alert 的设计无法符合我的选股程序的需求,今天来看看 Advanc...

[Day26]- 新手的Web系列CRLF 0x1

Day26- 新手的Web系列CRLF 0x1 正文 CRLF(CRLF Injection Att...

Now available the of Spotify Premium APK for all Android

Although YouTube Music hit the global market a few...

Day30-亲爱的,你成就了我

嗨,各位 经过了30天,最後一天让我说些感言ㄅ 首先我得先检讨一下自己 到後面都在打水仗啦rrrrr...

9/29(三) 制造业资安趋势:永续营业风险大解密线上研讨会

制造业是台湾经济的生力军,疫情延烧并未影响营运,资安事件反而成为不定时炸弹,造成企业商誉甚或营收受损...