PHP運算子知識點整理

藏色散人
發布: 2023-04-07 13:22:01
轉載
2435 人瀏覽過

一、算術運算子

##1. 概覽

PHP運算子知識點整理

2. TIPS

除法運算子總是傳回浮點數。只有在下列情況例外:兩個操作數都是整數(或字串轉換成的整數)並且剛好能整除,這時它會傳回一個整數。

取模運算子的運算元在運算之前都會轉換成整數(除去小數部分)。

取模運算子 % 的結果和被除數的符號(正負號)相同。即 $a % $b 的結果和 $a 的符號相同。例如:

echo (5 % 3)."\n";        // prints 2
echo (5 % -3)."\n";        // prints 2
echo (-5 % 3)."\n";        // prints -2
echo (-5 % -3)."\n";       // prints -2
登入後複製

二、位元運算子

#1. 概覽

PHP運算子知識點整理

PHP運算子知識點整理

PHP運算子知識點整理

PHP運算子知識點整理

PHP運算子知識點整理

#2. TIPS

位移在PHP 中是數學運算。

向任何方向移出去的位元都被丟棄。

左移時右側以零填充,符號位元被移除表示正負號不被保留。

右移時左側以符號位元填充,表示正負號被保留。

使用位元運算子時要特別注意優先順序。例如:

$a & $b == true 先進行比較再進行位元與;

($a & $b) == true 則先進行位元與再進行比較。

三、比較運算子PHP運算子知識點整理

1.概覽

PHP運算子知識點整理

2. TIPS

如果比較一個數字和字串或比較涉及數字內容的字串,則字串會被轉換為數值並且比較按照數值來進行。此規則也適用於 switch 語句。用 === 或 !== 比較時則不進行型別轉換,因為此時型別和數值都要比較。

<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
switch ("a") {
case 0:
    echo "0";
    break;
case "a": // 永远不会到达a,因为 "a" 已经与 0 匹配
    echo "a";
    break;
}
?>
登入後複製

3. 對於多種類型,比較運算子根據下表比較(依序)

##4 .鬆散比較表

PHP運算子知識點整理

四、遞增/遞減運算子

1.概覽

############### ##################2. TIPS#########遞增/遞減運算子不影響布林值。 ######遞減 NULL 值也沒有效果,但是遞增 NULL 的結果是 1。 ######在處理字元變數的算數運算時,PHP 沿著了 Perl 的習慣,而非 C 的。 ######例如,在Perl 中$a = 'Z'; $a ; 將把$a 變成'AA',而在C 中,a = 'Z'; a ; 將把a 變成' ['('Z' 的ASCII 值是90,'[' 的ASCII 值是91)。 ######注意字元變數只能遞增,不能遞減,並且只支援純字母(a-z 和 A-Z)。 ######遞增/遞減其他字元變數則無效,原始字串沒有變化。 #########五、邏輯運算子############1.概覽############################################################### 2. TIPS#########「與」和「或」有兩種不同形式運算子的原因是它們運算的優先權不同。 ###
// "&&" 比 "and" 的优先级高
// 表达式 (true && false) 的结果被赋给 $g
// 等同于:($g = (true && false))
$g = true && false;
// 常量 true 被赋给 $h,false 被忽略
// 等同于:(($h = true) and false)
$h = true and false;
登入後複製
######六、陣列運算子#############1.概覽#################### #2. TIPS#########數組中的單元如果具有相同的鍵名和值則比較時相等###
$a = array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
登入後複製
### 運算子和array_merge() 的區別######當當陣列下標為字元時,遇到相同鍵名, 運算子會拋棄掉後面的值; array_merge()會用後面的值覆寫前面的值。 ######當陣列下標示為數值時, array_merge()會保留所有的值,並重新索引陣列。運算子同樣會拋棄掉後面具有相同下標的值。 ###
$arr1 = [&#39;color&#39; => &#39;red&#39;, 10, 20];
$arr2 = [0, 1, &#39;color&#39; => &#39;green&#39;];
print_r($arr1 + $arr2);
print_r(array_merge($arr1, $arr2));
登入後複製
####輸出:###
Array ( [color] => red [0] => 10 [1] => 20 ) 
Array ( [color] => green [0] => 10 [1] => 20 [2] => 0 [3] => 1 )
登入後複製
###### 七、運算子優先權###########1.概覽####################################################################################### ###########2. TIPS#########如果運算子優先權相同,那麼運算子的結合方向決定了該如何運算。例如,"-"是左聯的,那麼1 - 2 - 3 就等同於(1 - 2) - 3 並且結果是-4. 另外一方面,"="是右聯的,所以$a = $b = $c 等同於$a = ($b = $c)。 ###

没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表达式 1 <= 1 == 1 是合法的, 因为 == 的优先级低于 <=。

括号的使用,哪怕在不是必要的场合下,通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。

着重记忆:

递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > 位运算符(^) > 位运算符(|) > 逻辑与 > 逻辑或 > 三目 > 赋值 > and > xor > or

3. 实战例题

请写出下列程序输出的结果

$a = 0;
$b = 0;
if ($a = 3 > 0 || $b = 3 > 0) 
{
    $a++;
    $b++;
    echo $a. "\n";
    echo $b. "\n";
}
登入後複製

例题分析

1.题目中包含 = > || 三种运算符,优先级顺序为 > > || > =

2.$a = 3 > 0 || $b = 3 > 0 等价于 $a = ( ( 3 > 0 ) || $b = ( 3 > 0 ) )

3.( 3 > 0 ) 为 true,因此不会再运算 || 后面的式子

4.$a = true,所以程序可以改写为

$a = 0;
$b = 0;
if ($a = true) 
{
    $a++;
    $b++;
    echo $a. "\n";
    echo $b. "\n";
}
登入後複製

5.因为 “递增/递减运算符不影响布尔值”,所以 $a++ 后,$a 的值依然是 true,echo true,会输出 1

6.因为 $b = 0 ,所以 $b++ 后,$b 的值为 1

7.输出结果为

1
1
登入後複製

以上是PHP運算子知識點整理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板