[PHP-doc 614] Re: mb_strpos

Seiji Masugata s.masugata @ digicom.dnp.co.jp
2006年 2月 26日 (日) 13:49:30 JST


桝形です。

> 1.mb_strrpos() は PHP4 ではバグってる。
> 2.(ちょっと無理があるけど(^^;) (1) を仕様と考えるなら、マニュア
>   ルに PHP4 と PHP5 じゃ動作が違うよって書く。

正解は2だと思うのですが。

(PHP4での)strrpos関数とmb_strrpos関数は仕様が元々違っています。
(PHP3での)strrpos関数とmbstrrpos関数も同様に、です。

http://jp2.php.net/strrpos

注意:  PHP 5.0.0 以降、needle  は 1 文字以上の文字列を指定可能です。

とあるので(PHP5から)strrposの仕様が変わっています。
(mb_strrpos関数と同じ仕様になった)


PHP4で、

print strrpos($theString, "ABC") . "\n";

と書いてるような(マニュアルをよく読んでいない)人は、PHP5にバージョン
UPした途端にアプリの挙動が変わってしまうのは避けられませんね。

逆に、mbstring.func_overloadで関数をオーバーロードして運用している
場合は助かると思いますけど。




仮に1だとしても、今からの修正は間違いなく無理だと思います。
(関数の挙動が変わってしまうので)

PHP4(のしかも途中から)だけ、仕様が変わってしまうのも変な話です。
マニュアルに注意書きを入れるしかないのかな、と思います。

mbstring.func_overloadの項目なのか、mb_strrpos関数の項目なのか、は
微妙なトコだと思いますが。



もっと突っ込んだ事を言うと「mbstring.func_overload」自体、無茶な
仕様だと思っています。状況によっては便利な場合もありますが。

(似たような機能ですが、目的と)動作が異なる関数をオーバーロード
している時点で、上位互換性も下位互換性もある訳が無い、というのが
自分の見解です。


-- 
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>



PHP-doc メーリングリストの案内