ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
このエラーの概要
PHP コードで配列キーや単純な識別子をクォートし忘れたとき、PHP 7 系では警告、PHP 8 系では Fatal Error が出ます:
<?php
// 悪い例: name がクォートされていない
echo $_POST[name];
// PHP 7.4 までの挙動
// Warning: Use of undefined constant name - assumed 'name'
// (this will throw an Error in a future version of PHP)
// → 値は取れるが警告が出る
// PHP 8.0 以降の挙動
// Fatal error: Uncaught Error: Undefined constant "name"
// → スクリプトが停止する
仕組み: 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: クォートを付ける(基本)
<?php
// 配列キー
$name = $_POST['name'];
$age = $_GET['age'];
$user = $_SESSION['user_id'];
// 多次元配列
$value = $config['database']['host'];
// foreach
foreach ($items as $key => $value) {
echo $item['name']; // ← クォート
}
// 関数引数
$pos = strpos($haystack, 'needle');
$arr = explode(',', $csv);
// クラス定数アクセスは別物(::はOK)
echo MyClass::CONST_NAME; // OK
echo MyClass::$staticProp; // OK
対処2: 本当に定数を使いたい場合
<?php
// グローバル定数
define('APP_VERSION', '1.0.0');
define('DB_HOST', 'localhost');
echo APP_VERSION; // OK: 1.0.0
// クラス定数(PHP 5.3+)
class Config
{
const VERSION = '1.0.0';
public const HOST = 'localhost'; // public/protected/private 修飾子 (PHP 7.1+)
final public const NAME = 'app'; // final (PHP 8.1+)
}
echo Config::VERSION;
// const キーワード (グローバル / クラス両用)
const MAX_ITEMS = 100;
// 動的な定数アクセス
$constName = 'APP_VERSION';
echo constant($constName);
// 定数が定義済みか確認
if (defined('APP_VERSION')) {
echo APP_VERSION;
}
対処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
# <?php
# return (new PhpCsFixer\Config())
# ->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
// php.ini
// error_reporting = E_ALL
// display_errors = Off (本番)
// log_errors = On
// error_log = /var/log/php/error.log
// 実行時に変更
error_reporting(E_ALL);
ini_set('display_errors', '1');
// 特定の警告だけ無視(非推奨)
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
// エラーハンドラ
set_error_handler(function ($severity, $message, $file, $line) {
if (!(error_reporting() & $severity)) {
return false;
}
throw new \ErrorException($message, 0, $severity, $file, $line);
});
未定義配列キーの関連エラー(PHP 8)
PHP 8.0 以降は未定義配列キーアクセスも警告 → エラー化しています:
<?php
$arr = ['a' => 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アノテーションとは
最近更新/作成されたページ
- 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
コメントを削除してもよろしいでしょうか?