更新-此问题适用于PHP<;8.2
-对于8.2+,您可以访问Randomizer
PHP supports `mt_rand()` and `mt_srand()`, but these are global and static.
我注意到在PHPC source中,mt_rand
使用engine_mt19937
实例;在PHP中有没有办法实例化我们自己的RNG实例,以便我们可以控制它的种子?
更新-此问题适用于PHP<;8.2
-对于8.2+,您可以访问Randomizer
我注意到在PHPC source中,mt_rand
使用engine_mt19937
实例;在PHP中有没有办法实例化我们自己的RNG实例,以便我们可以控制它的种子?
在PHP8.2+上是这样的.这一点见@AlexHowansky's answer.在早期的PHP版本中,没有.
您指向源代码的链接指向master
分支,自上个月正式发布以来,其中已经包含了PHP8.2逻辑.这就是为什么master
分支包括对MT19937发动机的引用.
在较旧的版本(例如最新的8.1 branch)上,您可以看到mt_rand()
没有使用可配置引擎,而只是判断它是否已经被设定为种子.PHP8.1及更早版本对mt_rand()
使用单个全局生成器,因此如果您想使用本地函数,则不可能有多个具有不同种子的RNG.
话虽如此,您可能可以针对PHP8.1推出自己的MT19937RNG实现.Others have.