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