Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

やっぱり型を意識しなきゃダメ

たとえば、

<?php
function getValue() {
    $a['hoge'] = '1';
    return $a;
}
$a = getValue();
var_dump($a['hoge']);

なコードがあって、途中で関数の仕様が

<?php
function getValue() {
    $a = '1';
    return $a;
}

のように変わった場合、

<?php
var_dump($a['hoge']);

は動作してしまいます。特に、getValue関数から返される値が1桁の場合、

$ php test.php
string(1) "1"
$

とか全然問題ないように見えてしまいます。理由はPHP: 文字列 - Manualの「文字列への文字単位のアクセスと修正」を参照ということで。

で、思ったのは、やはり「型を意識しなきゃダメ」だなぁ、ということ。

<?php
function getValue() {
    $a = '1';
    return (int)$a;
}
$a = getValue();
var_dump($a['hoge']);

というコードであれば、

$ php test.php
NULL
$

となり、誤りがハッキリと現れます。


こんなしょぼいバグに当たってびっくりしていた今日この頃。。。orz