ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
演算子一覧
| 演算子 | 名前 | 意味 | 結果 |
|---|---|---|---|
$a == $b | 等しい | 型変換後に等しいか | bool |
$a === $b | 厳密に等しい | 型まで含めて等しいか | bool |
$a != $b / $a <> $b | 等しくない | 緩い不等価 | bool |
$a !== $b | 厳密に等しくない | 厳密な不等価 | bool |
$a < $b | 未満 | 小なり | bool |
$a > $b | 超過 | 大なり | bool |
$a <= $b | 以下 | 小なりイコール | bool |
$a >= $b | 以上 | 大なりイコール | bool |
$a <=> $b | 宇宙船 (Spaceship) | -1 / 0 / 1 を返す | int |
$a ?? $b | Null 合体 | $a が null なら $b | 値 |
== (緩い比較) と === (厳密比較)
<?php
// 数値の比較
var_dump(1 == 1); // bool(true)
var_dump(1 === 1); // bool(true)
// 型が違うとき
var_dump(1 == '1'); // bool(true) ← 文字列が数値に変換される
var_dump(1 === '1'); // bool(false) ← 型が違うので false
var_dump(true == 1); // bool(true)
var_dump(true === 1); // bool(false)
var_dump(null == false); // bool(true)
var_dump(null === false); // bool(false)
var_dump(null == 0); // bool(true)
var_dump(null === 0); // bool(false)
var_dump('' == null); // bool(true)
var_dump('' === null); // bool(false)
原則: === を使う
== の罠は実際の事故に直結します。意図して緩く比較したい場合以外は === を使ってください:
<?php
// よくあるバグ例
$found = array_search('needle', $haystack);
if ($found == false) { // ❌ 0 番目に見つかると false 扱い
echo '見つからない';
}
if ($found === false) { // ✅ 厳密比較で本当に false かを判定
echo '見つからない';
}
// strpos も同じ問題
if (strpos($s, 'abc') == false) { // ❌
if (strpos($s, 'abc') === false) { // ✅
// パスワードチェック
if ($_POST['token'] == $expected_token) { // ❌ 危険
if (hash_equals($expected_token, $_POST['token'])) { // ✅ タイミング攻撃にも安全
PHP 8 での文字列・数値比較の変更
PHP 7 までは数値文字列でない文字列も数値に変換して比較していました。PHP 8 で挙動が変わっています:
| 式 | PHP 7 | PHP 8 |
|---|---|---|
0 == "abc" | true ("abc" → 0) | false (数値→文字列で比較) |
0 == "" | true | false |
0 == "0" | true | true (両方とも数値文字列扱い) |
10 == "10abc" | true | false + Warning |
10 == "10" | true | true |
<?php
// PHP 8 では「両者を文字列として」比較する (数値が文字列に)
var_dump(0 == 'abc'); // PHP 7: true / PHP 8: false
// 両者が数値文字列の場合のみ数値比較
var_dump(0 == '0'); // 両バージョン true
var_dump(100 == '100'); // 両バージョン true
var_dump(100 == '100.0'); // 両バージョン true
宇宙船演算子 <=> (PHP 7+)
並べ替え (usort) や 3 項比較に便利:
<?php
// 基本: -1 / 0 / 1 を返す
var_dump(1 <=> 2); // int(-1)
var_dump(2 <=> 2); // int(0)
var_dump(3 <=> 2); // int(1)
var_dump('a' <=> 'b'); // int(-1)
var_dump([1, 2] <=> [1, 3]); // int(-1)
// usort で並べ替え
$users = [
['name' => 'Bob', 'age' => 30],
['name' => 'Alice', 'age' => 25],
];
usort($users, fn ($a, $b) => $a['age'] <=> $b['age']);
// → 年齢の昇順
// 複合キー
usort($users, fn ($a, $b) =>
$a['age'] <=> $b['age'] // 第一に年齢
?: strcmp($a['name'], $b['name']) // タイブレーカーで名前
);
Null 合体演算子 ?? と ??= (PHP 7+)
<?php
// 従来: isset で 3項
$name = isset($_GET['name']) ? $_GET['name'] : 'Guest';
// Null 合体演算子 (PHP 7+)
$name = $_GET['name'] ?? 'Guest';
// 連鎖可能
$name = $_GET['name'] ?? $_POST['name'] ?? $defaultName ?? 'Guest';
// Null 合体代入 (PHP 7.4+)
$config['timeout'] ??= 30; // null か未定義なら 30
// 注意: ?? は null と未定義に true。'' や 0 は通す
$x = '' ?? 'default'; // ''
$x = 0 ?? 'default'; // 0
$x = null ?? 'default'; // 'default'
配列の比較
<?php
$a = ['x' => 1, 'y' => 2];
$b = ['y' => 2, 'x' => 1]; // 順序違い
$c = ['x' => '1', 'y' => '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([1,2,3] === [1,2,3]); // true
var_dump([1,2,3] === [3,2,1]); // false (順序違い)
オブジェクトの比較
<?php
class Point { public function __construct(public int $x, public int $y) {} }
$p1 = new Point(1, 2);
$p2 = new Point(1, 2);
$p3 = $p1;
var_dump($p1 == $p2); // bool(true) ← 同じクラス + 同じプロパティ値
var_dump($p1 === $p2); // bool(false) ← インスタンスが別物
var_dump($p1 === $p3); // bool(true) ← 同じインスタンス参照
Type Juggling (型ジャグリング) のルール
異なる型を == で比較したときの変換ルール(PHP 8 ベース):
| 左 | 右 | 比較方法 |
|---|---|---|
| null / bool | any | 両者を bool に変換 |
| int / float | 数値文字列 | 両者を数値として比較 |
| int / float | 非数値文字列 | PHP 8: 文字列として比較 |
| string | string | 文字列比較 |
| array | array | 要素同士を比較 |
| object | object | 同クラス + プロパティ一致 |
FAQ
Q: switch 文の中での比較は?
A: switch は == 相当(緩い比較)。意図しない一致を避けたいときは match(PHP 8+)が === 相当で安全。
Q: in_array の比較は?
A: 既定で == 緩い比較。in_array($needle, $arr, true) の第 3 引数 true で === 厳密比較に。常に true を指定を推奨。
Q: 浮動小数の比較
A: 0.1 + 0.2 == 0.3 は false。abs($a - $b) < PHP_FLOAT_EPSILON 等で許容誤差比較を。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?