簡體   English   中英

uuid-php.x86_64 uuid_create()“參數未通過引用傳遞”問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM