更新-此问题适用于PHP〈8.2
-对于8.2+,您可以访问Randomizer
PHP支持'mt_兰德()'和'mt_srand()',但它们是全局和静态的。
我注意到在PHP C源代码中mt_rand
使用了一个engine_mt19937
示例;在PHP中是否有一种方法可以示例化我们自己RNG示例,以便我们可以控制它的种子?
更新-此问题适用于PHP〈8.2
-对于8.2+,您可以访问Randomizer
PHP支持'mt_兰德()'和'mt_srand()',但它们是全局和静态的。
我注意到在PHP C源代码中mt_rand
使用了一个engine_mt19937
示例;在PHP中是否有一种方法可以示例化我们自己RNG示例,以便我们可以控制它的种子?
2条答案
按热度按时间bgibtngc1#
在PHP中是否有一种方法可以示例化我们自己RNG示例,以便我们可以控制它的种子?
对于PHP 8.2+,是的。参见\Random类。您可以执行以下操作:
dldeef672#
在PHP8.2+上,可以。请看@AlexHowansky的回答。在早期的PHP版本上,不行。
源代码链接指向
master
分支,自上个月正式发布以来,该分支已经包含了PHP 8.2逻辑,这就是master
分支包含MT 19937引擎引用的原因。在旧版本(例如最新的8.1分支)中,您可以看到
mt_rand()
没有使用可配置的引擎,而只是检查它是否已经被播种。PHP 8.1和更早的版本为mt_rand()
使用单个全局生成器,因此如果您想使用本机函数,不可能有多个具有不同种子的RNG。话虽如此,您也许可以推出自己的MT 19937 RNG for PHP 8.1.Others have实现。