1

uuid_createパラメータを参照渡しする必要があります。

uuid_create(&$foo);

問題は、これによりエラーが発生することです。

Message:    Call-time pass-by-reference has been deprecated

PHP 拡張機能はuuid-php.x86_64古くなっていますか? PHP 5 とは「互換性」がありません。

これが重複していないことを強調したいだけです。

$foo    = NULL;

uuid_create($foo);

生産します:

Type:       Run-time warnings (non-fatal error).
Message:    uuid_create(): uuid_create: parameter wasn't passed by reference
4

1 に答える 1

3

PHPにはメソッドがなくuuid_create、ドキュメントにも記載されていないため、拡張機能からのものである場合は、公式のものではなく、おそらく古くなっています。関数が値を返す代わりにoutパラメーターを期待しているという事実は、関数がかなり悪いことを示すかなり明白な兆候です。

ただし、uuid4を生成するPHPコードの記述は、すべてのフィールドにランダムな値を使用するため、非常に簡単です。つまり、MACアドレスなどのシステム固有のものにアクセスする必要はありません。

function uuid4() {
    return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        // 32 bits for "time_low"
        mt_rand(0, 0xffff), mt_rand(0, 0xffff),

        // 16 bits for "time_mid"
        mt_rand(0, 0xffff),

        // 16 bits for "time_hi_and_version",
        // four most significant bits holds version number 4
        mt_rand(0, 0x0fff) | 0x4000,

        // 16 bits, 8 bits for "clk_seq_hi_res",
        // 8 bits for "clk_seq_low",
        // two most significant bits holds zero and one for variant DCE1.1
        mt_rand(0, 0x3fff) | 0x8000,

        // 48 bits for "node"
        mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
    );
}
于 2012-06-02T09:00:44.327 に答える