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 { }
得た教訓
リテラルや定数を左に書け
一言
「普通そんな事はありえない」と言っていると実際発生した時に無駄な時間を費やすのである