LoginSignup
1
1

More than 5 years have passed since last update.

substr() で length指定するとき、元の文字列長チェックは不要

Posted at

こんなコードを見かけた。

define('STR_LENGTH_MAX', 255);
$str = getSomeLongString(); //何か長いかもしれない文字列を返す関数
if (strlen($str) > STR_LENGTH_MAX){
    $str = substr($str, 0, STR_LENGTH_MAX);
}

実装した人はおそらく素朴に「規定の文字列長以上だったら切り詰める」を実装したのだろう。

もちろんこれでも動くが、そもそもこんなことしなくても

substr() の第3引数で指定した文字列長より、第1引数で渡した文字列が短い場合

substr() は元の文字列をそのまま帰すので、この実装は単純に

define('STR_LENGTH_MAX', 255);
$str = substr(getSomeLongString(), 0, STR_LENGTH_MAX);

でOK。

念のため、実証コードを掲載。

$ cat test.php
<?php
error_reporting(E_ALL);

$str = 'abcdefghijklmn';
for ($i = 1;$i<20;$i++){
    echo substr($str,0,$i), PHP_EOL;
}

$ php test.php 
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
abcdefghijkl
abcdefghijklm
abcdefghijklmn
abcdefghijklmn
abcdefghijklmn
abcdefghijklmn
abcdefghijklmn
abcdefghijklmn

$str の文字列の長さより、substr() の第3引数のほうが大きい場合
$str そのものが返却されていることがわかる。
エラーも特におきない。

1
1
0

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
1
1