PHP

変数や演算子

開始タグと終了タグ

<?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サーバ情報および実行時の環境情報
$_GETHTTP GET変数
$_POSTHTTP POST変数
$_FILESHTTP ファイルアップロード変数
$_REQUESTHTTP リクエスト変数
$_SESSIONセッション変数
$_ENV環境変数
$_COOKIEHTTP クッキー
$php_errormsg直近のエラーメッセージ
$HTTP_RAW_POST_DATA生のPOSTデータ
$http_response_headerHTTP レスポンスヘッダ
$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 > baがbより大きいとき真
<a < baがbより小さいとき真
>=a >= baがb以上のとき真
<=a <= baがb以下のとき真
==a == baとbが同じとき真
!=a != baとbが異なるとき真
===a === baとbの値と型が同じとき真
!==a !== baと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 && baかつbの両方がtrueの時true
anda and b上と同じ
||a || baまたはbどちらかがtrueの時true
ora or b上と同じ
xora xor baまたはbのどちらか片方だけがtrueの時true
!!aaがtrueならばfalse、falseならばtrue
三項演算子

論理式  trueの時の値  falseの時の値

<?php
$res = ( $a > $b ) ? 10 : 5
?>

$a > $bがtrueの時$resは10、falseなら、5

ビット演算子
演算子演算式説明
<<a << baのビットをb桁左へシフトする
>>a >> baのビットを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)$aNULLにする
※元の値$aの型は変換されないので注意

演算子の優先順位
演算子結合性
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

関数