作成日:2006/05/10
1H 演算子
1H.1 基本的な演算子と優先順位
優先順位の高いものから順に演算子を並べてあります。
| 結合 | 項の数 | 演算子 | 説明 |
|---|---|---|---|
| しない | 1 | new |
オブジェクトの生成 |
| 右 | 1 | [ |
配列のインデックス |
| しない | 1 | ++ |
後置および前置のインクリメント演算子(C風) |
-- |
後置および前置のデクリメント演算子 (C風) | ||
| しない | 1 | ! |
論理演算子 NOT(C風) |
~ |
ビット演算子 NOT(C風) | ||
- |
算術演算子 符号の反転 | ||
(型) |
型のキャスト | ||
@ |
エラー制御演算子 | ||
| 左 | 2 | * |
算術演算子 乗算 |
/ |
算術演算子 除算 | ||
% |
算術演算子 剰余 | ||
| 左 | 2 | + |
算術演算子 加算 |
- |
算術演算子 加算 | ||
. |
文字列演算子 結合 | ||
| 左 | 2 | << |
ビット演算子 左シフト |
>> |
ビット演算子 右シフト | ||
| しない | 2 | < |
比較演算子 より大きい |
> |
比較演算子 より小さい | ||
<= |
比較演算子 以上 | ||
>= |
比較演算子 以下 | ||
| しない | 2 | == |
比較演算子 等しい |
!= |
比較演算子 等しくない | ||
=== |
比較演算子 等しい(型の比較も含む) | ||
!== |
比較演算子 等しくない(型の比較も含む) | ||
| 左 | 2 | & |
ビット演算子 AND(C風) |
| 左 | 2 | ^ |
ビット演算子 XOR(C風) |
| 左 | 2 | | |
ビット演算子 OR (C風) |
| 左 | 2 | && |
論理演算子 AND(C風) |
| 左 | 2 | || |
論理演算子 OR (C風) |
| 左 | 3 | ?: |
条件演算子: 「式1?式2:式3」は式1が真なら式2を、偽なら式3を評価し値とします |
| 右 | 2 | = |
代入演算子 |
OP= |
複合代入演算子: OPには算術・文字列・ビット演算子が利用可:- * / . % & | ^ << >> |
||
| 左 | 2 | and |
論理演算子 AND(Basic風) |
| 左 | 2 | xor |
論理演算子 XOR(Basic風) |
| 左 | 2 | or |
論理演算子 OR (Basic風) |
| 左 | 2 | , |
列挙演算子: 左の式を評価して値を捨てた後、右の式を評価する |
- 結合即:
- 上の「結合」は結合規則の事です。
結合規則は、同じ優先順位の演算子が連続した場合、左右どちらの演算子から評価するかを決めた規則です。
左結合は左の演算子から、右結合は右の演算子から評価されます。
$a = 1 + 2 - 3; // $a=(1+2)-3;と同値。(左結合) $a = $b += 1; // $a=($b+=1);と同値。(右結合)
1H.2 エラー制御演算子
エラー制御演算子(@)を式の前に付けた場合、その式により生成されたエラーメッセージを表示しません。 @演算子は、式でのみ動作します。例えば、変数、定数、関数の前にこの演算子をつけることができます。 関数またはクラスの定義や ifやforeachなどのような文の前にこの演算子を付けることはできません。
用例:
$a = 1/0; // 0割りが発生します
$a = @(1/0); // @を付けると警告が表示されません
include('dummy.php'); // 存在しないファイルをincludeしています
@include('dummy.php'); // @を付けると警告が表示されません
$lines = file('dummy.txt'); // 存在しないテキストファイルを読み込んでいます
$lines = @file('dummy.txt'); // @を付けると警告が表示されません
1H.3 実行演算子
PHP はPerlと同じく、逆クォート演算子(``) をサポートしています。 逆クォートでコマンド文字列を括ると、その文字列をシェルコマンドとして実行とし、出力が返されます。 バッククォート演算子の使用は shell_exec() と等価です。
用例:
$output = `dir`; // OSがWindows系の場合です echo "<pre>$output</pre>";
1H.4 配列演算子
一部の演算子は配列の為にオーバーロードされています。
| 演算の名前 | 演算の例 | 演算の結果 |
|---|---|---|
| Union | $a + $b |
左側配列($a)に右側配列($b)の要素を追加します。この時、同じキーは上書きしません。 この演算は可換ではありません。($a+$b)と($b+$a)は一般に異なります。 |
| Equality | $a == $b |
配列($a)と配列($b)が全て同じ要素を持つときTRUEになります。 各要素の型は問いません。(0と'0'は同じです) |
| Identity | $a === $b |
配列($a)と配列($b)が同じ順序で全て同じ要素を持つときTRUEになります。 各要素の型も同じである必要があります。(0と'0'は異なります) |
| Inequality | $a != $b |
Equalityの否定です。 |
| Inequality | $a <> $b |
Equalityの否定です。 |
| Non-identity | $a !== $b |
Identityの否定です。 |
用例:Union
$a = array(0=>"A", 1=>"B", 3=>"D"); $b = array(0=>"a", 1=>"b", 2=>"c"); $c = $a + $b; // Union of $a and $b print_r($c); // Array([0]=>A [1]=>B [3]=>D [2]=>c) を出力します $c = $b + $a; // Union of $b and $aArray print_r($c); // Array([0]=>a [1]=>b [2]=>c [3]=>D) を出力します
用例:比較
$a = array( 0=>0, 1=>1, 2=>2 ); $b = array( 2=>2, 1=>1, 0=>0 ); $c = array(0, 1, "2"); $d = array(0, 1, 2); var_dump($a == $b); // bool(true ) を出力します var_dump($a === $b); // bool(false) を出力します:要素の順序が違います var_dump($a == $c); // bool(true ) を出力します var_dump($a === $c); // bool(false) を出力します:要素の型が違います var_dump($a == $d); // bool(true ) を出力します var_dump($a === $d); // bool(true ) を出力します:要素の順序、値、型ともに同じです
