2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

strlen()の挙動について

Posted at

#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上数値ではなく文字列が入るか入らないかという作りをしていたのでたまたまよかったようです。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?