PHP8.2その2
前回に引き続ききになったやつ。
Add true type
https://wiki.php.net/rfc/true-type
true型
Allow null and false as stand-alone types
https://wiki.php.net/rfc/null-false-standalone-types
null型、false型
つまりtrueを返す、nullを返す、falseを返す。
そもそもがUNION型の一部としてfalse型を使えるようになっていたようだが単独でも使えるようになった、
でfalseもあるならtrueもと。
例にあるのはnull|falseは今まで使えなかった。
組み込み関数のgmp_random_seed()はnull|falseを返していたがfalse型はなかったので正確にはnull|boolとなるが
実際にはtrueは返すことがなかったのでおかしいと。
で8.2でfalse型を返すので正しい書き方ができるように。
ちなみに
1 |
function test(): false|true {} |
のようにboolの代わりにfalse|trueはエラーになる。
Random Extension 5.x
https://wiki.php.net/rfc/rng_extension
PHPの乱数は今までいろいろ問題があって直してはきた。
記事中にもありますが「一貫して壊れてる」とかあまりお目にかかれない言葉。
で、今回の8.2では
1 2 3 4 5 6 7 8 9 |
<?php function foo(): void { // do nothing; } mt_srand(1234); foo(); mt_rand(1, 100); // result: 76 |
これが
1 2 3 4 5 6 7 8 9 |
<?php function foo(): void { str_shuffle('abc'); // added randomization } mt_srand(1234); foo(); mt_rand(1, 100); // result: 65 |
こうなってしまうと(https://3v4l.org/とかで実際に上記を実行すると65ではなく7になってました)
間のstr_shuffleが影響してしまっていると。
てことでそれらを解決するためのクラス
Random\Randomizer クラス
https://www.php.net/manual/ja/class.random-randomizer.php
1 2 3 4 5 6 7 |
<?php $engine = new Random\Engine\Secure(); $randomizer = new Random\Randomizer($engine); $required_result = $randomizer->getInt(1, 100); echo $required_result; // ランダムな数字 |