[PHP-users 24546] Re: strpos の戻り値
Seiji Masugata
s.masugata @ digicom.dnp.co.jp
2005年 2月 16日 (水) 13:47:08 JST
こんにちわ、桝形です。
> > 指定した文字列が最初から有った場合 0 が戻りますが 無かった場合も
> > 考えてコーディングすると 結果が正しく戻りません。
>
> 0の場合だけ切り分けて、都合の良い結果を返すように(部分文字列比較)
> してやれば良いのではないでしょうか?
>
> // 都合の良いstrposサンプル(動作未確認)
> function my_strpos( $a, $b ) {
>
> if ( substr( $a, 0, strlen($b) ) == $b ) {
> return 0;
> } else {
> return False;
> }
> }
これでは、あまり変わらないと思います。
(オリジナルの動作と対して変わらないような。。。)
PHP4でも確認できると思いますが、
if( 0 == false ){ echo "True!!"; }
なので、自分がよくやってるのは、
<?
$String = "TARGET";
$Ichi = strpos( $String, "TARGET" );
// 0だと長さ1、falseだと長さ0がstrlenでは返る
if( strlen( $Ichi ) <= 0 ){ echo "False!!"; }
else { echo "True!!"; }
?>
で、逃げてます。
is_intとかでもいいんでしょうけど、
$str = 0;
var_dump(is_int($str));
$str = false;
var_dump(is_int ($str));
[PHP5]
bool(true)
bool(false)
[PHP4]
bool(true)
bool(false)
[PHP3]
int(1)
string(0) ""
と、戻り値が微妙に変わるので、あまり好きではありません。
微妙な違いのせいで、PHPをバージョンUPした時に動かなくなる
可能性もあります。
さすがに、新規でPHP3というのもアレですが。。。
# でも過去の遺産を引きずっている人は意外にいるハズ。
var_dump(strlen(1 ));
var_dump(strlen(false ));
[PHP5]
int(1)
int(0)
[PHP4]
int(1)
int(0)
[PHP3]
int(1)
int(0)
falseより-1の方が戻り値としては嬉しいのかもしれませんね。
--
Seiji Masugata<s.masugata @ digicom.dnp.co.jp>
PHP-users メーリングリストの案内