#strlen()
##事件
本番稼働中のシステムの改修をしてると
以下の記述がありました。
(変数名は実際のものから変更しております。)
if (isset($data['content']) && strlen($data['content'] > 0)) {
// うんたらかんたら
}
strlen($data['content'] > 0)
えっなにこれ
こわい
なにがこわいって本番稼働してるうえに今のところバグとされる報告もないし、
テストしても問題なかったんですよね。
#挙動を試す
##値がある場合
$array = array('content' => 'こんてんと', 'title' => 'たいとる');
echo '正:';
echo strlen($array ['content']) > 0 ? 'true' : 'false';
echo '<br>誤:';
echo strlen($array ['content'] > 0) ? 'true' : 'false';
結果
正:true
誤:true
ふぇーっ
##値がある場合(数値)
$array = array('content' => '10', 'title' => '0');
echo '正:';
echo strlen($array ['content']) > 0 ? 'true' : 'false';
echo '<br>誤:';
echo strlen($array ['content'] > 0) ? 'true' : 'false';
結果
正:true
誤:true
うーん。。。
##値がない場合
$array = array('content' => '', 'title' => 'たいとる');
echo '正:';
echo strlen($array ['content']) > 0 ? 'true' : 'false';
echo '<br>誤:';
echo strlen($array ['content'] > 0) ? 'true' : 'false';
結果
正:false
誤:false
えっいいのこの書き方で。。。?
##値が0
$array = array('content' => 0, 'title' => 10);
echo '正:';
echo strlen($array ['content']) > 0 ? 'true' : 'false';
echo '<br>誤:';
echo strlen($array ['content'] > 0) ? 'true' : 'false';
結果
正:true
誤:false
まあそうなりますわな。
#結論
括弧の閉じる位置には気をつけましょう。
今回はUI上数値ではなく文字列が入るか入らないかという作りをしていたのでたまたまよかったようです。