Writing Appropriately

職務経歴

PHP 過去にハマった出来事と得た教訓

過去にハマった出来事 その1

なぜかTRUEにならない。

$rsという配列にはレコードがオブジェクトが入っていると思い込んでいて、実際に配列が入っていた時、

<?php
ini_set('error_reporting', E_ALL & ~E_NOTICE);

// $rsはDBから取得したレコードセットを想定
$rs = array(
    array(
        'id' => 1,
        'flg' => 1
    ),
    array(
        'id' => 1,
        'flg' => 1
    )
);

foreach ($rs as $r) {
    // データベース上でflgは1なのになぜかFALSEになる
    if (1 == $r->flg) { // 正しくは$r['flg']
        echo "TRUE\n";
    }
    else {
        echo "FALSE\n";
    }
}

得た教訓

E_NOTICEを非表示にするなどありえない


過去にハマった出来事 その2

リテラルを左に書く理由

 if (1 == $r->flg) {

左に書けば次のようなミスがエラーで止まるから

<?php

$flg = 0;

// 処理は正常…$flgに1がはいるだけの事…
if ($flg = 1) {
    // $flgが0なのになぜかこっちにくる
}
else {
    // $flgが0なのにこっちにこない
}

// 左に書いておけば"="をうちミスっていてもエラーとなるためすぐ気がつく
// [PHP Parse error:  syntax error, unexpected '=' in ***]
if (1 = $flg) {

}
else {

}

得た教訓

リテラルや定数を左に書け

一言

「普通そんな事はありえない」と言っていると実際発生した時に無駄な時間を費やすのである