1. 算術演算子
1. 概要
2. ヒント
除算演算子は常に浮動小数点数を返します。唯一の例外は、両方のオペランドが整数 (または文字列から変換された整数) であり、正確に割り切れる場合であり、その場合は整数を返します。
モジュロ演算子のオペランドは、演算前に整数 (小数部を除く) に変換されます。
モジュロ演算子 % の結果は、被除数の符号 (正または負の符号) と同じです。つまり、 $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
2. ビット演算子
1. 概要
2. ヒント
ディスプレイスメントは、PHP の数学演算です。
任意の方向に移動されたビットは破棄されます。
左にシフトすると、右側がゼロで埋められ、符号ビットが削除されます。これは、正と負の符号が保持されないことを意味します。
右にシフトすると、左側が符号ビットで埋められます。これは、正と負の符号が保持されることを意味します。
ビット演算子を使用する場合は、優先順位に特に注意してください。例:
$a & $b == true、最初に比較してからビット単位の AND を実行;
($a & $b) == true、最初にビット単位の AND を実行してから比較. .
3. 比較演算子
1. 概要
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 に従って比較します。大まかな比較表
4. インクリメント/デクリメント演算子
1. 概要
2. ヒント
インクリメント/デクリメント演算子はブール値には影響しません。 NULL 値を減らしても効果はありませんが、NULL を増やした結果は 1 になります。 文字変数の算術演算を扱う場合、PHP は C の習慣ではなく Perl の習慣に従います。 たとえば、Perl では $a = 'Z'; $a ; は $a を 'AA' に変換し、C では a = 'Z'; a ; は a を ' [' ( 「Z」の ASCII 値は 90、「[」の ASCII 値は 91)。 文字変数は増加のみ可能で減少はできず、純粋な文字 (a ~ z および A ~ Z) のみをサポートすることに注意してください。 他の文字変数のインクリメント/デクリメントは無効となり、元の文字列は変更されません。5. 論理演算子
1. 概要
2 . TIPS
「AND」と「OR」に 2 つの異なる形式の演算子がある理由は、演算の優先順位が異なるためです。// "&&" 比 "and" 的优先级高 // 表达式 (true && false) 的结果被赋给 $g // 等同于:($g = (true && false)) $g = true && false; // 常量 true 被赋给 $h,false 被忽略 // 等同于:(($h = true) and false) $h = true and false;
6. 配列演算子
1. 概要
2. ヒント
配列内のセルのキー名と値が同じ場合、比較すると同じになります$a = array("apple", "banana"); $b = array(1 => "banana", "0" => "apple"); var_dump($a == $b); // bool(true) var_dump($a === $b); // bool(false)
When 配列添字が文字の場合、同じキー名が見つかった場合、演算子は後続の値を破棄し、array_merge() は前の値を後続の値で上書きします。 配列の添字が数値の場合、array_merge() はすべての値を保持し、配列のインデックスを再作成します。演算子は、同じ添え字を持つ後続の値も破棄します。
$arr1 = ['color' => 'red', 10, 20]; $arr2 = [0, 1, 'color' => 'green']; 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 )
7. 演算子の優先順位
1. 概要
##2. ヒント演算子の優先順位が同じ場合、演算子の組み合わせの方向によって操作方法が決まります。たとえば、「-」は左結合であり、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 中国語 Web サイトの他の関連記事を参照してください。