[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 メーリングリストの案内