uuid-php.x86“u 64 uuid”u create();参数为';t通过引用传递”;问题

uuid-php.x86“u 64 uuid”u create();参数为';t通过引用传递”;问题,php,uuid,Php,Uuid,uuid\u create要求通过引用传递参数 uuid_create(&$foo); 问题是,这将产生错误: Message: Call-time pass-by-reference has been deprecated PHP扩展uuid PHP.x86\u 64过时了吗?它与PHP5不“兼容”。有哪些替代方案 只是想强调这不是重复的。 $foo = NULL; uuid_create($foo); 将产生: Type: Run-time warni

uuid\u create
要求通过引用传递参数

uuid_create(&$foo);
问题是,这将产生错误:

Message:    Call-time pass-by-reference has been deprecated
PHP扩展
uuid PHP.x86\u 64
过时了吗?它与PHP5不“兼容”。有哪些替代方案

只是想强调这不是重复的。

$foo    = NULL;

uuid_create($foo);
将产生:

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

PHP没有一个方法
uuid\u create
,文档中也没有提到它,因此如果它来自一个扩展,它很可能不是一个正式的,而且可能已经过时。函数需要一个out参数而不是返回值,这一事实已经非常明显地表明该函数相当糟糕

但是,编写PHP代码来生成uuid4非常简单,因为它对所有字段都使用随机值,也就是说,您不需要访问特定于系统的内容,例如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)
    );
}

没有。你只需要把
$foo
放进去,前面没有
&
,就这样了。我在这里写了一条评论,然后搜索副本,几天前我们已经有了这个问题。我可能使用了
exec('uuid-v4')
。最好看看这里:@hakre
uniqid()
是一个毫无价值的实现。它就像
time()+rand([…])
一样随机。我怀疑这是否比
exec('uuid-v4')
-但我对TS看到的警告有点困惑。函数正常返回。@Guy:我想是的。无需创建新流程等。PHP实际上有一个UUID模块。它不是官方发行版的一部分,但由PHP核心团队维护,并通过PECL发布: