こんなコードを見かけた。
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
そのものが返却されていることがわかる。
エラーも特におきない。