[PHP-users 29464] Re: uniqid()の引数について

TAKAGI Masahiro matakagi @ osk2.3web.ne.jp
2006年 6月 21日 (水) 20:15:18 JST


高木です。

At Wed, 21 Jun 2006 19:54:13 +0900,
shima tetuo wrote:
> 
> tetuoです。
> 
> uniqidのマニュアルには下のような説明があります。
> 
> /////////////////////////////////////////////////////
> uniqid
> http://jp.php.net/manual/ja/function.uniqid.php
> 
> string uniqid ( [string prefix [, bool more_entropy]] )
> uniqid() は、ミリ秒単位の現在時刻に基づき 先頭辞(prefix)を付けたユニー
> クな ID を返します。prefix は オプションですが、有用です。....
>                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(snip)
> 
> prefixはオプションと言うことなので、uniqid()だけでの呼び出しは問題ないは
> ずですが、下のようなサンプルコードを実行するとWarningが発生し、uniqidの
> 戻り値もnullになってしまいます。
> 
(snip)
> 
> **********
> 環境
> **********
> windows 2000 server
> php 4.4.2
> 
> 
> **********
> 問題
> **********
> prefixは”オプション”と言うことにもかかわらず、指定しないとWarningが発
> 生することと、prefixを指定しないことにより?戻り値もnullというユニークな
> IDではなく、マニュアルの使用例のようにするといつも同じIDが発生します。
> 
マニュアルをよく読んでみると、下のほうにひっそりと
「注意:  prefix パラメータは PHP 5 ではオプションとなります。」
という記述があります。

prefix はもともとオプションではなかったのですが、以下の変更によってオ
プション引数になったようです。
 http://cvs.php.net/viewcvs.cgi/php-src/ext/standard/uniqid.c?r1=1.34&r2=1.35

で、この変更は PHP 4 系のソースツリーには適用されていないため、PHP 4
以前では prefix は必須となります。


> これはマニュアルの問題なのでしょうか?uniqid()の実装の問題なのでしょうか?
というわけで、答えは
 マニュアルの記述がわかりにくい・まぎらわしい
でした :-)
確かにこの書き方だと PHP 4 でもそうなると勘違いしてしまいますよね……。

-- 
高木 正弘 mailto:matakagi @ osk2.3web.ne.jp


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