[PHP-doc 617] Re: [PHP-dev 1224] Re: Re: mb_strpos

Seiji Masugata s.masugata @ digicom.dnp.co.jp
2006年 2月 27日 (月) 20:33:37 JST


桝形です。

> > > 2.(ちょっと無理があるけど(^^;) (1) を仕様と考えるなら、マニュア
> > >   ルに PHP4 と PHP5 じゃ動作が違うよって書く。
> > 
> > 正解は2だと思うのですが。
> > 
> > (PHP4での)strrpos関数とmb_strrpos関数は仕様が元々違っています。
> > 
> > http://jp2.php.net/strrpos
> > 
> > 注意:  PHP 5.0.0 以降、needle  は 1 文字以上の文字列を指定可能です。
> > 
> > とあるので(PHP5から)strrposの仕様が変わっています。
> > (mb_strrpos関数と同じ仕様になった)
> 
> そのとおりでしょうね。
> PHP 5 のソースアーカイブに含まれる「README.PHP4-TO-PHP5-THIN-CHANGES」
> というファイルの先頭にも、しっかりこのことが書かれています。
> > 1. strrpos() and strripos() now use the entire string as a needle. Be aware
> >    that the existing scripts may no longer work as you expect.


http://jp2.php.net/strrpos

よく見てみると、第3引数([, int offset])が追加されています。
しかし、mb_strrpos関数では、

http://jp2.php.net/mb_strrpos

int mb_strrpos ( string haystack, string needle [, string encoding] )

と、なっているので、mbstring.func_overloadでstrrpos関数をオーバー
ロードした時に、引数の意味合いが変わってしまいますね。

needleの仕様はともかく、offsetの動作が変わるのは。。。という気がします。


mbstring.func_overloadを仕様として残すのであれば、mb_strrpos関数側で
何かしらの対応は必要だと思います。

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



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