ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
キャストの一覧
var_dump((int)"42"); // int(42)
var_dump((float)"1.5"); // float(1.5)
var_dump((string)42); // string(2) "42"
var_dump((bool)"0"); // bool(false) ← "0" は偽
var_dump((array)"a"); // ["a"]
var_dump((object)['n'=>1]); // stdClass {n: 1}
// 別名
(integer)$x; // (int) と同じ
(boolean)$x; // (bool) と同じ
(double)$x; // (float) と同じ
文字列から数値への変換ルール
var_dump((int)"42"); // 42
var_dump((int)"42abc"); // 42 ← 先頭の数値だけ拾う。エラーにならない
var_dump((int)"abc"); // 0 ← 数値が無ければ 0
var_dump((int)""); // 0
var_dump((int)" 42"); // 42 先頭の空白は無視される
var_dump((int)"0x1A"); // 0 16 進表記は解釈されない
var_dump((int)"1e3"); // 1000 指数表記は解釈される
var_dump((int)"3.9"); // 3 切り捨て(四捨五入ではない)
var_dump((int)-3.9); // -3 0 方向に切り捨て
var_dump((int)null); // 0
var_dump((int)true); // 1
変換に失敗しても例外は出ません。「入力が数値かどうか」を判定したいなら、キャストではなく検証関数を使います。
入力値の検証
$input = $_GET['page'] ?? '';
// 1. 数値として妥当かを判定してから使う
$page = filter_var($input, FILTER_VALIDATE_INT);
if ($page === false) {
$page = 1; // 数値でなければ既定値
}
// 範囲も一緒に検証できる
$page = filter_var($input, FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1, 'max_range' => 100, 'default' => 1],
]);
// 2. is_numeric で数値文字列かを見る
var_dump(is_numeric("42")); // true
var_dump(is_numeric("42abc")); // false
var_dump(is_numeric("1e3")); // true
var_dump(is_numeric(" 42")); // true 先頭空白は許される
var_dump(is_numeric("42 ")); // PHP 8.0 以降は true(8.0 で変更)
// 3. 整数かどうか
var_dump(ctype_digit("42")); // true 0-9 だけか(負数は false)
filter_var() は「妥当でなければ false」を返すので、(int) と違って不正入力を検出できます。0 が返る場合と false が返る場合を区別するため、判定は必ず === false で行ってください。
関数による変換
var_dump(intval("42")); // 42
var_dump(intval("1A", 16)); // 26 基数を指定できる(キャストにはできない)
var_dump(intval("0x1A", 0)); // 26 0 なら接頭辞から自動判別
var_dump(floatval("1.5kg")); // 1.5
var_dump(strval(1.0)); // "1"
var_dump(boolval("0")); // false
$x = "42";
settype($x, "integer"); // 変数そのものを書き換える
var_dump($x); // int(42)
var_dump(number_format(1234567)); // "1,234,567" ← 表示用。数値ではなく文字列
bool への変換
| 値 | (bool) の結果 |
|---|---|
false 0 0.0 -0.0 "" "0" [] null | false |
それ以外すべて("0.0" "false" " " [0] -1 を含む) | true |
var_dump((bool)"0"); // false ← 文字列の "0" だけ特別扱い
var_dump((bool)"0.0"); // true
var_dump((bool)"false"); // true
var_dump((bool)[]); // false
var_dump((bool)[0]); // true 要素があるので真
"0" が偽になるのは PHP 特有です。フォームから来た文字列の "0" を「入力あり」と判定したいときは === '' や strlen() で見ます。
配列・オブジェクトへの変換
var_dump((array)"abc"); // ["abc"] 要素 1 個の配列
var_dump((array)null); // [] 空配列
var_dump((array)5); // [5]
class User {
public string $name = '田中';
protected int $age = 30;
private bool $admin = false;
}
print_r((array)new User());
// ['name' => '田中', "\0*\0age" => 30, "\0User\0admin" => false]
オブジェクトを配列にキャストすると、protected / private のキーに制御文字が混ざります。実用には get_object_vars() か json_decode(json_encode($obj), true) を使ってください(オブジェクトを配列に変換する方法)。
暗黙の型変換と strict_types
function half(int $n): int {
return (int)($n / 2);
}
half("10"); // 5 既定では "10" が int に変換される
half("abc"); // TypeError(PHP 8 以降)
half(3.9); // Deprecated: 暗黙の float→int 変換で精度が落ちる
<?php
declare(strict_types=1); // ファイルの先頭行に置く(他の文より前)
function half(int $n): int { return (int)($n / 2); }
half(10); // 5
half("10"); // TypeError: half(): Argument #1 ($n) must be of type int, string given
declare(strict_types=1) はそのファイルで書かれた呼び出しにだけ効きます。ライブラリ側に付けても、呼ぶ側のファイルに無ければ変換されます。新規のファイルには付けておくと、型の取り違えを早い段階で発見できます。
数値の精度
var_dump(0.1 + 0.2 == 0.3); // false 浮動小数点の誤差
var_dump(abs(0.1 + 0.2 - 0.3) < 1e-9); // true
var_dump((int)"9223372036854775808"); // int(9223372036854775807) 桁あふれで丸められる
var_dump(PHP_INT_MAX); // 9223372036854775807
// 金額は文字列 + bcmath で扱う
echo bcadd('0.1', '0.2', 1); // 0.3
金額や数量など誤差が許されない計算では float を使わず、整数(最小単位で保持)か bcmath を使います。
日付との相互変換
// 文字列 → DateTime
$d = new DateTimeImmutable('2026-09-07 12:00:00');
$d = DateTimeImmutable::createFromFormat('Y/m/d', '2026/09/07');
if ($d === false) {
// 形式が合わないと false。必ず確認する
}
// DateTime → 文字列
echo $d->format('Y-m-d H:i:s');
// 文字列 → UNIX 時刻(失敗すると false)
$ts = strtotime('2026-09-07');
var_dump($ts === false);
// UNIX 時刻 → 文字列
echo date('Y-m-d', $ts);
// タイムゾーンを明示する
$d = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
strtotime() は解釈できない文字列で false を返します。(int)strtotime($s) と書くと失敗が 0(=1970年)になって気づけません。必ず === false で判定してください。
JSON との変換
$data = ['name' => '田中', 'age' => 30];
echo json_encode($data); // {"name":"田中","age":30}
echo json_encode($data, JSON_UNESCAPED_UNICODE); // {"name":"田中","age":30}
$back = json_decode('{"a":1}'); // stdClass として受け取る
$back = json_decode('{"a":1}', true); // 連想配列として受け取る
// 失敗の検出(PHP 7.3 以降)
try {
json_decode('{bad}', true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
echo $e->getMessage(); // Syntax error
}
// 数値がとても大きいと精度が落ちる
var_dump(json_decode('{"id":12345678901234567890}')->id); // float
var_dump(json_decode('{"id":12345678901234567890}', false, 512,
JSON_BIGINT_AS_STRING)->id); // string
json_decode() は失敗しても既定では null を返すだけです。JSON_THROW_ON_ERROR を付けると例外になり、握りつぶしを防げます。
フォームの値はすべて文字列
// チェックボックスは「送られてこない」か "on"
$isPublic = isset($_POST['is_public']); // bool として受ける
// 数値
$qty = filter_input(INPUT_POST, 'qty', FILTER_VALIDATE_INT) ?: 1;
// 金額(小数を扱うなら文字列のまま検証してから整数化する)
$raw = $_POST['price'] ?? '';
if (!preg_match('/\A\d+(\.\d{1,2})?\z/', $raw)) {
throw new InvalidArgumentException('金額の形式が不正です');
}
$priceInSen = (int)round((float)$raw * 100); // 最小単位の整数で保持する
// 空文字と 0 と未入力を区別する
$note = $_POST['note'] ?? null;
if ($note === null) { /* 項目自体が無い */ }
elseif ($note === '') { /* 入力欄が空 */ }
$_GET / $_POST の値は常に文字列(または配列)です。1 と "1" の違いで === の比較が食い違うため、受け取った直後に検証して型を決めてしまうのが安全です。
関連
- 文法 — 親カテゴリ
- データ型
- 比較演算子 — 比較時の型変換
- 代入の際の注意点
- オブジェクトを配列に変換する方法
- A non well formed numeric value encountered
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
コメントを削除してもよろしいでしょうか?