[英]uuid-php.x86_64 uuid_create() “parameter wasn't passed by reference” issue
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
PHP沒有uuid_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)
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.