ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
このエラーの概要
PHP コードで配列キーや単純な識別子をクォートし忘れたとき、PHP 7 系では警告、PHP 8 系では Fatal Error が出ます:
仕組み: PHP のパーサは識別子 name を見ると、まず「定数として定義されているか?」を探します。定数が見つかればその値、見つからなければ「これは文字列リテラルだろう」と推測して 'name' として扱う、というレガシー仕様がありました。これが PHP 8 で正式に廃止されました。
原因の典型パターン
| 悪い例 | 正しい例 | 説明 |
|---|---|---|
$_POST[name] | $_POST['name'] | 連想配列キーは必ずクォート |
$arr[id] | $arr['id'] | 同上 |
echo hello | echo 'hello' | 文字列リテラル |
strpos($s, abc) | strpos($s, 'abc') | 関数引数の文字列 |
$tag = a; | $tag = 'a'; or define('a', 'val') | 未定義の識別子 |
対処1: クォートを付ける(基本)
$value) {
echo $item['name']; // ← クォート
}
// 関数引数
$pos = strpos($haystack, 'needle');
$arr = explode(',', $csv);
// クラス定数アクセスは別物(::はOK)
echo MyClass::CONST_NAME; // OK
echo MyClass::$staticProp; // OK
対処2: 本当に定数を使いたい場合
対処3: define vs const の違い
| 項目 | define() | const |
|---|---|---|
| 定義場所 | 関数内・条件分岐内 OK | トップレベル or クラス内のみ |
| 動的な値 | 変数・関数結果 OK | コンパイル時定数式のみ |
| 大文字小文字 | 第3引数 true で無視可(PHP 7.3 で廃止予定) | 常に大小区別 |
| 名前空間 | 第1引数に NS を文字列で書く必要 | 現在の NS に自動所属 |
| パフォーマンス | 遅い(実行時) | 速い(コンパイル時) |
PHP 8 移行時の自動修正
レガシーコードを大量修正する場合は静的解析ツールを使います:
# PHP CS Fixer
composer require --dev friendsofphp/php-cs-fixer
# .php-cs-fixer.dist.php
# setRules([
# '@PSR12' => true,
# 'array_syntax' => ['syntax' => 'short'],
# 'no_unused_imports' => true,
# ])
# ->setFinder(PhpCsFixer\Finder::create()->in(__DIR__ . '/src'));
vendor/bin/php-cs-fixer fix src/
# Rector (PHP 8 自動マイグレーション)
composer require --dev rector/rector
vendor/bin/rector init
# rector.php
# return RectorConfig::configure()
# ->withPhpSets(php82: true)
# ->withRules([
# Rector\Php74\Rector\ArrayDimFetch\ArrayDimFetchToStringRector::class,
# ]);
vendor/bin/rector process src/
PHP のエラーレベル制御
未定義配列キーの関連エラー(PHP 8)
PHP 8.0 以降は未定義配列キーアクセスも警告 → エラー化しています:
1];
// PHP 7: Notice
// PHP 8: Warning
echo $arr['b'];
// 安全なアクセス(PHP 7+)
echo $arr['b'] ?? 'default';
// isset チェック
if (isset($arr['b'])) {
echo $arr['b'];
}
// 配列キー存在確認(null も区別)
if (array_key_exists('b', $arr)) {
echo $arr['b'];
}
// null 安全演算子 (PHP 8.0+)
echo $user?->profile?->name ?? '匿名';
FAQ
Q: PHP 5.x から PHP 8.x にアップグレードしたら大量の Fatal Error
A: Rector の php80 セットでほぼ自動修正できます。手動修正なら grep -rn "\\$_\\(POST\\|GET\\|SESSION\\)\\[[a-zA-Z_]" src/ で抽出。
Q: ライブラリの中で警告が出る
A: 自分のコードでなければライブラリを更新してください。Composer の composer outdated で古いものを確認。古すぎて更新不可ならフォークか置き換え検討。
Q: 警告を一時的に黙らせたい
A: 短期的には @ 抑制演算子(非推奨)。中長期的には根本修正してください。error_reporting 全体を下げると他のバグを見逃します。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- Fatal error: Maximum execution time of 30 seconds exceeded in...
- Fatal error: Uncaught Error: Cannot use object of type stdClass as array in ...
- Warning: Use of undefined constant ... - assumed '...' (this will throw an Error)
- ERROR: Call to undefined method Maatwebsite\Excel\Excel::load()
- Maximum execution time of 30 seconds exceeded
- Your requirements could not be resolved to an installable set of packages. ... To enable extensions, verify that they are enabled in your .ini files:
- could not find driver
- the requested PHP extension mbstring is missing from your system.
- the requested PHP extension dom is missing from your system.
- A non well formed numeric value encountered
- Warning: Cannot modify header information - headers already sent by ...
- php_network_getaddresses: getaddrinfo failed: Name or service not known
- XMLWriter::openUri(): Unable to resolve file path
- Object of class stdClass could not be converted to string
- Class 'Google_Service_Youtube' not found
人気ページ
- 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アノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?