変数や演算子
開始タグと終了タグ
<?php echo "Hello world."; ?>
HTMLへの埋め込み
<!DOCTYPE html> <html> <?php $name = "alpha" <body> 名前は: <?= $name ?> </body> </html>
ステートメントの区切りとコメント
ステートメントの区切り
<?php echo "hello world."; echo "hello php."; ?>
PHPのコードステートメントの区切りは「;」セミコロンです。
コメント
<?php # 1行をコメントアウト // 1行をコメントアウト /* 複数行をコメントアウト */ echo /* コマンドの途中をコメントアウト */ "hello world."; ?>
「#」や「//」の記載より以右から改行または終了タグまではコメント文となる。コメント文を複数行にわたって記載したい場合は、「#」や「//」を都度付けるか、「/*」から「*/」までで囲まれた範囲は改行があってもコメント文となります。
変数と定数
変数
変数は値を一時的に保管する箱。「$」に続いて英字またはアンダースコアから開始し、2文字目からは数字も利用可能。大文字と小文字の区別があるため、スペルが同じでも区別される。
<?php $name = "beta"; echo $name; ?>
変数のスコープ
変数にはローカルスコープと、グローバルスコープ、スーパーグローバルの3つと、関数の中で値が保持されるスタティックと、定義済変数という物がある。定義済変数は以下の通り、$_で始まるものはスーパーグローバル変数と呼ばれる。
| 定義済変数 | 値 | 
|---|---|
| $GLOBALS | グローバルスコープで使用可能なすべての変数への参照 | 
| $_SERVER | サーバ情報および実行時の環境情報 | 
| $_GET | HTTP GET変数 | 
| $_POST | HTTP POST変数 | 
| $_FILES | HTTP ファイルアップロード変数 | 
| $_REQUEST | HTTP リクエスト変数 | 
| $_SESSION | セッション変数 | 
| $_ENV | 環境変数 | 
| $_COOKIE | HTTP クッキー | 
| $php_errormsg | 直近のエラーメッセージ | 
| $HTTP_RAW_POST_DATA | 生のPOSTデータ | 
| $http_response_header | HTTP レスポンスヘッダ | 
| $argc | スクリプトに渡された引数の数 | 
| $argv | スクリプトに渡された引数の値(配列) | 
定義済の定数
コアモジュール定数
| コアモジュール定数 | 値 | 
|---|---|
| PHP_VERSION_ID | 実行中のPHPのバージョンを整数値であらわしたもの | 
| PHP_EOL | 現在のOSの改行文字 | 
| PHP_INT_MAX | 整数型の最大値 | 
| PHP_INT_MIN | 整数型の最小値 | 
| PHP_OS | 現在のOS | 
| TRUE | 論理値の真 | 
| FALSE | 論理値の偽 | 
| NULL | 変数が値を持っていない | 
| E_ERROR | 重大な実行エラー | 
| E_PARSE | コンパイル時のパースエラー | 
マジック定数
| マジック定数 | 値 | 
|---|---|
| __LINE__ | ファイル上の現在の行番号 | 
| __FILE__ | ファイルパスとファイル名 | 
| __DIR__ | ファイルのディレクトリ | 
| __FUNCTION__ | 現在の関数名 | 
| __CLASS__ | クラス名。(トレイトをuseしているクラス名) | 
| __TRAIT__ | トレイト名 | 
| __METHOD__ | クラスのメソッド名 | 
| __NAMESPACE__ | 現在の名前空間の名前 | 
演算子
演算子とは変数に値を代入したり、足し算や引き算、掛け算や割り算などの演算を行うための記号。
代入演算子
| 演算子 | 演算式 | 説明 | 
|---|---|---|
| = | $a = 10 | 変数$aに10を代入する | 
| += | $a += 5 | $a = $a + 5 と同じ | 
| -= | $a -= 5 | $a = $a - 5 と同じ | 
| *= | $a *= 2 | $a = $a * 2 と同じ | 
| /= | $a /= 2 | $a = $a / 2 と同じ | 
| %= | $a %= 2 | $a = $a % 2 と同じ | 
| .= | $a .= 'baa' | $a = $a . 'baa' と同じ | 
算術演算子
| 演算子 | 演算式 | 説明 | 
|---|---|---|
| + | +10 | プラスの値 | 
| - | -10 | マイナスの値 | 
| + | 10 + 5 | 加算 | 
| - | 10 - 5 | 減算 | 
| * | 10 * 5 | 乗算 | 
| / | 10 / 5 | 除算 | 
| % | 10 % 3 | 剰余(10÷3の余り=1) | 
| ** | 10 ** 2 | 乗数(10の2乗) | 
インクリメントとデクリメント / ポストインクリメントとポストデクリメント
| 演算子 | 演算式 | 説明 | 例 | 
|---|---|---|---|
| ++ | ++$a | $aに1を足す | $b = ++$a ※足してから代入 | 
| -- | --$a | $aから1を引く | $b = --$a ※引いてから代入 | 
| ++ | $a++ | $aに1を足す | $b = $a++ ※代入してから足す | 
| -- | $a-- | $aから1を引く | $b = $a-- ※代入してから引く | 
<?php // 文字のインクリメント $a = "a"; print(++$a); --- "b"
比較演算子
| 演算子 | 演算式 | 説明 | 
|---|---|---|
| > | a > b | aがbより大きいとき真 | 
| < | a < b | aがbより小さいとき真 | 
| >= | a >= b | aがb以上のとき真 | 
| <= | a <= b | aがb以下のとき真 | 
| == | a == b | aとbが同じとき真 | 
| != | a != b | aとbが異なるとき真 | 
| === | a === b | aとbの値と型が同じとき真 | 
| !== | a !== b | aとbの値または型が異なるとき真 | 
PHP7から追加された演算子
| 演算子 | 演算式 | 説明 | 
|---|---|---|
| <=> | a <=> b | aがbより小さい時負の値、aとbが同値の時0、aがbより大きい時正の値 | 
| ?? | a ?? b ?? c | a,b,cの順に評価して、最初に見つかったNULLではない値を返す。すべてがNULLならNULL | 
<?php // 初期値 $num = $input ?? 10 ?>
論理演算子
論理演算子を使う時は、算術演算子より優先順位が低いので括弧で括るようにする。
| 演算子 | 演算式 | 説明 | 
|---|---|---|
| && | a && b | aかつbの両方がtrueの時true | 
| and | a and b | 上と同じ | 
| || | a || b | aまたはbどちらかがtrueの時true | 
| or | a or b | 上と同じ | 
| xor | a xor b | aまたはbのどちらか片方だけがtrueの時true | 
| ! | !a | aがtrueならばfalse、falseならばtrue | 
三項演算子
論理式 ? trueの時の値 : falseの時の値
<?php $res = ( $a > $b ) ? 10 : 5 ?>
$a > $bがtrueの時$resは10、falseなら、5
ビット演算子
| 演算子 | 演算式 | 説明 | 
|---|---|---|
| << | a << b | aのビットをb桁左へシフトする | 
| >> | a >> b | aのビットをb桁右へシフトする | 
| & | a & b | 各桁同士を比較し両方が1ならば1、そうでなければ0 | 
| | | a | b | 各桁同士を比較しどちらかが1なら1、そうでなければ0 | 
| ^ | a ^ b | 各桁同士を比較し片方だけが1ならば1、そうでなければ0 | 
| ~ | ~a | 各桁の1と0を逆転させる | 
キャスト演算子
| 演算子 | 演算式 | 説明 | 
|---|---|---|
| (int) | (int)$a | $aを整数とする | 
| (bool) | (bool)$a | $aを論理値とする | 
| (float) | (float)$a | $aを浮動小数点とする | 
| (string) | (string)$a | $aを文字列とする | 
| (array) | (array)$a | $aを配列とする | 
| (object) | (object)$a | $aをオブジェクトとする | 
| (unset) | (unset)$a | NULLにする | 
演算子の優先順位
| 演算子 | 結合性 | 
|---|---|
| clone new | 結合しない | 
| [ | 左 | 
| ** | 右 | 
| ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 右 | 
| instanceof | 結合しない | 
| ! | 右 | 
| * / % | 左 | 
| + - . | 左 | 
| << >> | 左 | 
| < <= > >= | 結合しない | 
| == != === !== <> <=> | 結合しない | 
| & | 左 | 
| ^ | 左 | 
| | | 左 | 
| && | 左 | 
| || | 左 | 
| ⁇ | 右 | 
| ? : | 左 | 
| = += -= *= **= /= .= %= &= != ^= <<= >>= => | 右 | 
| and | 左 | 
| xor | 左 | 
| or | 左 | 
| , | 左 | 
制御構造
if文
条件式の結果によって処理を分岐する制御構造
if (条件式) {
  処理
}
graph TD
  A((Start)) --> B{if条件式}
  B -- True --> C(処理)
  B -- false --> D(( ))
  C --> D
  D --> E((ENd))
if (条件式) {
  処理A
} else {
  処理B
}
graph TD
  A((Start)) --> B{if条件式}
  B -- True --> C(処理A)
  B -- False --> D(else\n処理B)
  C --> E(( ))
  D --> E(( ))
  E --> F((End))
if (条件式1) {
  処理A
} else if(条件式2) {
  処理B
} else if(条件式3) {
  処理C
} else {
  処理Z
}
graph TD
  A((Start)) --> B{if条件式1}
  B -- true --> C(処理A)
  C --> X(( ))
  B -- false --> D{if条件式2}
  D -- true --> DD(処理B)
  DD --> X
  D -- false --> E{if条件式3}
  E -- true  --> EE(処理C)
  EE --> X
  E -- false --> Y(else\n処理Z)
  Y --> X
  X --> XX((End)) 
switch文
式の値によって処理を分岐する制御構文
switch (式) {
  case 値1:
    処理1
    break;
  case 値2:
    処理2
    break;
  ...
  default:
    処理X
    break;
}
graph TB
  A((Start)) --> B{switch 式}
  B -- 値1 --> BB(処理1)
  BB -->  Y(( ))
  B -- 値2 --> CC(処理2)
  CC --> Y
  B -- Default --> DD(処理X)
  DD -->  Y
  Y --> Z((End))
  
  
while文・do-while文
条件が満たされている間同じ処理を繰り返す。
while (条件式) {
  処理
}
graph TB
  A((Start)) --> B{while\n条件式}
  B -- true --> C(処理)
  C --> B
  B -- false --> X((End))
do {
  処理
} while (条件式);
graph TB
  A((Start)) --> B(do)
  B --> C(処理)
  C --> D{while\n条件式}
  D -- true --> B
  D -- false --> E((End))
for文
カウンタを使って繰り返し回数を数えながら処理を繰り返す制御構文
for (初期化; 条件式; カウンタ更新) {
  処理
}
graph TB
  A((Start)) --> B(初期化)
  B --> C{条件式}
  C -- true --> D(処理)
  C --->| false | X((End))
  D --> E(更新)
  E --> C
