今週の PHP 2022/06/11 〜 2022/06/17
PHP のメーリングリストから、気になった情報をピックアップします。
Internal
PHP RFC: Random Extension 5.x
zeriyoshi さんの乱数生成に関する RFC です。Vote が始まっています。
ご本人の zenn を読むと、RFC の全体像が分かりやすいかと思います。
乱数については、更に下記のスライドがめちゃくちゃ勉強になります。zeriyoshi さんに感謝
PHP: rfc:true-type
Accepted です。 null 型 false 型 と共に、true 型も 8.2 で入ります。
PHP: rfc:partially-supported-callables-expand-deprecation-notices
callble 関連で、記法の統一が提案されていましたが、付随して callable 周りの Deprecation Notice を充実させようという RFC です。Accepted なので入ります。多分、8.2 なのではないかな???
関連 RFC はこちら
Bugs
The influence of opcache on the behavior of enum cases. · Issue #8418 · php/php-src
<?php
class ExampleClass
{
public const EXAMPLE_CONST = 42;
}
enum ExampleEnum: int
{
case ENUM_CASE = ExampleClass::EXAMPLE_CONST;
}
var_dump(ExampleEnum::ENUM_CASE->value);
これを、opcache.enable_cli=1 で実行すると
2回めの実行で、Enumの値を参照できなくなる。
これは面白い。
修正の PR
要するに最初のコンパイル時に静的にCacheされてないということだったのだろうか?
もしくは、リンクがはられてしまって、参照できなくなったことによるエラーだろうか?
zend_enum_build_backed_enum_table
っていうのが鍵のようだ
同様ケース https://github.com/php/php-src/issues/7821
ようするに const を ENUM の 値に使うことで発生するようだ。
mb_convert_encoding "\" (backslash) and "~" (tilde) convert failed to Shift_JIS · Issue #8281 · php/php-src
てきめんさんが上げていた Issue
日本人 PHPer 軍団の尽力もあり、修正されて無事にマージされた。
コミュニティを維持して、こういったイシューを上げたり、サポートしたりできる人を増やしていくことは大事だなと思った。
Intl not working with ICU 71.1 in Alpine 3.16 · Issue #8817 · php/php-src
Alpine が icu のデータセットを英語とそれ以外で分けてしまった。
デフォルトは英語しか入らないため、Alpine ベースのコンテナで、マルチバイト的な扱いを ICU に依存していたやつらが火を吹いた件
Docker の PHP コンテナにて、イシューが上がっています。
すでに、Postgres のコンテナなどでは、icu-data-full をコンテナに含めるように修正が行われています。
PHP のコンテナはどうなるのか?みんなで Thums Up して応援しましょう。
PDO MySQL returns php value type "string" for column type "YEAR" · Issue #1631 · php/doc-en
恥ずかしながら、MySQL の Year 型を知らなかった。
そして、知らなかった型の戻り値の方が、知らぬ間に int から string に変わっていた。
そもそもが、Year 型が 0パディングされた4桁の数字文字列だったらしいので、string で返るのが正しいとのこと。
Incorrect timestamp parsing · Issue #8809 · php/php-src
月に3桁の数字を入れるとパースがおかしいという報告。
これは、timelib が正しくパースするようになった結果なので、BC ブレークではあるが、won't fix 案件
そもそも、文字列という融通無碍なものをパースする時点で、全員が納得する方向性はないんだなというのが、イシューを見続けた感想
Discussion