ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
演算子の一覧
| 演算子 | 意味 | 型を見るか |
|---|---|---|
== | 等しい(型変換あり) | 見ない |
=== | 型も値も等しい | 見る |
!= / <> | 等しくない | 見ない |
!== | 型か値が違う | 見る |
< > <= >= | 大小 | 見ない |
<=> | 左が小さければ -1、同じなら 0、大きければ 1 | 見ない |
?? | 左が null か未定義なら右 | — |
?: | 左が偽なら右(0 や "" も偽) | — |
== と === の違い
var_dump(1 == "1"); // true 型をそろえてから比べる
var_dump(1 === "1"); // false 型が違う
var_dump(0 == false); // true
var_dump(0 === false); // false
var_dump("1" == "01"); // true どちらも数値文字列 → 数値として比較
var_dump("1" === "01"); // false
var_dump("10" == "1e1"); // true どちらも数値文字列(1e1 は 10)
var_dump(100 == "1e2"); // true
var_dump(null == false); // true
var_dump(null === false); // false
「郵便番号 "0123" と "123" が一致してしまう」といった事故は、== が数値文字列を数値として比べることが原因です。ID・コード・郵便番号など、意味のある文字列は必ず === で比べてください。
PHP 8 で変わった点
// 数値 と 非数値文字列 の比較
var_dump(0 == "foo"); // PHP 8: false / PHP 7: true
var_dump(0 == ""); // PHP 8: false / PHP 7: true
var_dump("abc" == 0); // PHP 8: false / PHP 7: true
// 数値 と 数値文字列 の比較は今までどおり
var_dump(0 == "0"); // true
var_dump(42 == "42"); // true
var_dump(42 == " 42"); // true
PHP 8 では数値と非数値文字列を比べるとき、数値のほうを文字列に変換して比較するようになりました。if ($id == 0) のような書き方が PHP 7 と 8 で挙動を変えるため、バージョンを上げるときの確認点になります。
宇宙船演算子と並べ替え
var_dump(1 <=> 2); // int(-1)
var_dump(2 <=> 2); // int(0)
var_dump(3 <=> 2); // int(1)
$users = [
['name' => '田中', 'age' => 30],
['name' => '鈴木', 'age' => 25],
];
// 年齢の昇順
usort($users, fn($a, $b) => $a['age'] <=> $b['age']);
// 降順は左右を入れ替える
usort($users, fn($a, $b) => $b['age'] <=> $a['age']);
// 複数キー: 年齢の降順、同じなら名前の昇順
usort($users, fn($a, $b) =>
[$b['age'], $a['name']] <=> [$a['age'], $b['name']]);
配列同士に <=> を使うと先頭の要素から順に比較されるため、複数キーの並べ替えが 1 行で書けます。
null の判定
$x = 0;
var_dump($x == null); // true ← 0 も拾ってしまう
var_dump($x === null); // false これが正しい
var_dump(is_null($x)); // false
// 未定義でも警告が出ない書き方
$name = $user['name'] ?? '名無し'; // null か未定義なら右
$name = $user['name'] ?: '名無し'; // 偽(0 や "" も含む)なら右
$obj?->method(); // null なら呼ばずに null を返す
// 代入も ?? でできる
$config['debug'] ??= false; // 未設定のときだけ入れる
| 書き方 | 右辺が使われる条件 | 未定義でも警告なし |
|---|---|---|
$a ?? $b | $a が null または未定義 | はい |
$a ?: $b | $a が偽(0 "" [] も含む) | いいえ |
配列とオブジェクトの比較
var_dump([1, 2] == [1, 2]); // true
var_dump(['a'=>1,'b'=>2] == ['b'=>2,'a'=>1]); // true 順序は見ない
var_dump(['a'=>1,'b'=>2] === ['b'=>2,'a'=>1]); // false 順序も見る
class P { public function __construct(public int $x) {} }
$a = new P(1); $b = new P(1); $c = $a;
var_dump($a == $b); // true 同じクラスで中身が同じ
var_dump($a === $b); // false 実体が違う
var_dump($a === $c); // true 同じ実体
オブジェクトの === は「同じインスタンスか」を判定します。値が同じかどうかを見たいときは ==、または比較用のメソッドを自分で用意します。
文字列の比較
var_dump("apple" < "banana"); // true 辞書順
var_dump("10" < "9"); // true どちらも数値文字列 → 数値比較
var_dump("10a" < "9a"); // false 非数値文字列 → 辞書順
var_dump(strcmp("a", "b")); // int(-1) 型変換なしで比べる
var_dump(strcasecmp("A", "a")); // int(0) 大文字小文字を無視
var_dump(strnatcmp("img10", "img9")); // int(1) 自然順(人間の感覚)
// パスワードやトークンはタイミング攻撃に強い比較を使う
var_dump(hash_equals($stored, $input));
秘密の文字列を === で比べると、一致するバイト数で処理時間が変わり推測の手がかりになります。トークンや署名の比較には hash_equals() を使ってください。
型変換は switch と in_array にも効く
$value = 0;
switch ($value) { // switch は == で比較する
case "abc": // PHP 7 なら一致してしまう
echo "abc";
break;
}
// match は === で比較する(PHP 8 以降・こちらが安全)
echo match ($value) {
0 => "ゼロ",
default => "その他",
};
var_dump(in_array("abc", [0, 1, 2])); // PHP 8: false
var_dump(in_array(1, ["1", "one"], true)); // false 厳密比較
match は常に === で比較し、どれにも当たらなければ UnhandledMatchError を投げます。分岐漏れを実行時に検出できるため、値による分岐は switch より match が安全です。
関連
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?