Notice: Undefined variable, offset, indexの対処法 : PHP, WordPress

Pocket

PHP Notice: Undefined variabl/offset/indexという警告に対する対処法のメモ。

  • Undefined variableは値を設定していない変数へアクセスすると発生する。
  • Undefined offsetは値を設定していない配列の要素へアクセスすると発生する。
  • Undefined indexは値を設定していないリクエスト変数($_POST, $_GET)へアクセスすると発生する。

Noticeはエラーレベルによっては表示されない[1]

対策はissetで有効な値が設定されているかをチェックする。
» isset
「変数がセットされていること、そして NULL でないことを検査する」

下記のコードはFORMの中にname属性がhogeという要素はないので
PHP Notice: Undefined index というエラーが表示される。

<form action="example.php" method="POST">
<input type="text" name="foo">
<input type="submit" value="送信">
</form>
if ($_POST['hoge']) {
    // do something;
}

issetで値が設定されているときだけ処理する。

if (isset($_POST['hoge'])) {
    // do something
}

### &&, andとの併用

<?php
error_reporting(E_ALL);
// 何も表示せずNoticeも発生しない
$foo;
$bar;
if (isset($foo) && $bar) {
    print($foo + ', ' + $bar);
}
?>

PHPの&&, and(どちらも論理積)[2]は左が偽のときは右を評価しない。上記のコードは&&の右$barは評価されないのでNoticeは起こらない。

参考にした記事

[1] php.iniやPHPファイル内でerror_reporting()関数やini_set(‘error_reporting’, 定数)を使ってNoticeを出さないようにすることもできる。
実行時の警告。エラーを発しうる状況に遭遇したことを示す。 ただし通常のスクリプト実行の場合にもこの警告を発することがありうる
[2] 優先順位が異なる。ビット演算子の&は&&, andと異なり両辺を評価する。

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。