すべてのプログラミング言語には演算子があり、演算子は柔軟に使用する必要があります。
演算子には異なる優先順位と組み合わせの方向があります。
<?php var_dump(1 <= 1 == 1); // truevar_dump(true ? 0 : true ? 1 : 2); // 2$a = 1;var_dump(++$a + $a++); // may print 4 or 5
必要に応じて括弧を使用すると、コードが読みやすくなります。
モジュロ演算子の結果は、被除数と同じ符号を持ちます。
代入演算子は、元の変数の値を新しい変数にコピーします。例外は、オブジェクトが見つかった場合、コピーに明示的に clone キーワードが使用されない限り、値は参照によって割り当てられます。
新しい演算子は自動的に参照を返します。
ディスプレイスメントには次のルールがあります:
いずれかの方向にシフトアウトされたビットは破棄されます。
左シフト時にゼロが埋め込まれ、符号は保持されません。
右にシフトすると符号ビットが埋められます。これは、正と負の符号が保持されることを意味します。
このセクションの焦点は、マニュアル内の主要なサンプル プログラムを理解することです。この例の文字列の XOR 演算は理解するのが難しいです。これについては後で説明します。整数の変位もあって、よくわかった気がします。
通常の等号 == は、型変換後の 2 つの値が等しい限り true を返します。
数値と文字列を比較する場合、または数値コンテンツを含む文字列を比較する場合、文字列は数値に変換され、比較は数値として実行されます。
<?php var_dump(0 == "a"); // truevar_dump("1" == "01"); // truevar_dump("10" == "1e1"); // true
PHP 5.3 以降、三項演算子の中間部分を省略できるようになりました。式 expr1 ?: expr3 は、expr1 が true の場合は expr1 を返し、それ以外の場合は expr3 を返します。三項演算子は左から右に評価されます。
PHP は、式に対してのみ有効なエラー制御演算子 @ をサポートしています。これを式の前に置くと、式によって生成されるエラー メッセージは無視されます。
関数やクラスの定義の前に配置したり、if や foreach などの条件構造で使用したりすることはできません。
PHP は、キーボードの左上隅にあるバックティックという実行演算子をサポートしています。効果は関数shell_exec()と同じです。
<?php $output = `systeminfo`;$outip = shell_exec('ipconfig');echo "<pre class="brush:php;toolbar:false">$outip";echo "
$output";
セーフ モードがアクティブになっている場合、またはshell_exec() がオフになっている場合、バックティック演算子は効果がありません。
注意!二重引用符で囲まれた文字列ではバッククォートを使用できません。
インクリメント/デクリメント演算子はブール値には影響しません。
NULL 値を減らしても効果はありませんが、NULL を増やした結果は 1 になります。
文字変数の算術演算を処理する場合、PHP は C の習慣ではなく Perl の習慣に従います。たとえば、Perl では $a = 'Z'; は $a を 'AA' に変換します。
注意!文字変数は増加のみ可能で減少はできず、純粋な文字 (a ~ z および A ~ Z) のみをサポートします。他の文字変数の増減は無効となり、元の文字列は変化しません。
<?php $z = 'z';$Z = 'Z';var_dump(++$z); // 'aa'var_dump(++$Z); // 'AA'
|| は or よりも優先されます。 && は and よりも優先度が高くなります。
最初のものは接続演算子です。2 つ目は接続代入演算子です。=。
共用体: $a + $b。右側の配列要素を左側の配列に追加します。両方の配列にキーが存在する場合は、左側の配列のキーのみが使用され、変更は無視されます。
等しい: $a == $b。同じキーと値のペアがあります。
合同: $a === $b。同じキーと値のペアを同じ順序とタイプで持ちます。
等しくありません: $a != $b または $a a8093152e673feb7aba1828c43532094
合同ではありません: $a !== $b。
配列内のセルのキー名と値が同じ場合、順序と型は関係なく比較されます。
<?php $a = array("apple", "banana");$b = array(1 => "banana", "0" => "apple");var_dump($a);var_dump($b);var_dump($a == $b);var_dump($a === $b);
出力結果は以下の通りです。
array (size=2) 0 => string 'apple' (length=5) 1 => string 'banana' (length=6)array (size=2) 1 => string 'banana' (length=6) 0 => string 'apple' (length=5)boolean trueboolean false
PHP には型演算子 instanceof があり、PHP 変数が特定のクラスのインスタンスに属しているかどうかを判断するために使用されます。
<?php class MyParent {}class MyClass extends MyParent {}class NotMyClass {}interface MyInterface {}class InClass implements MyInterface {}$a = new MyClass;var_dump($a instanceof MyClass); // truevar_dump($a instanceof NotMyClass); // falsevar_dump($a instanceof MyParent); // true$b = new InClass;var_dump($b instanceof MyInterface); // true$c = 'InClass';var_dump($b instanceof $c); // truevar_dump($c instanceof stdClass); // false
instanceof は定数の検出に使用できないことに注意してください。
(全文完成)