📚

今週の PHP 2022/06/11 〜 2022/06/17

2022/06/19に公開

PHP のメーリングリストから、気になった情報をピックアップします。

Internal

PHP RFC: Random Extension 5.x

zeriyoshi さんの乱数生成に関する RFC です。Vote が始まっています。

https://wiki.php.net/rfc/rng_extension

ご本人の zenn を読むと、RFC の全体像が分かりやすいかと思います。

https://zenn.dev/zeriyoshi/articles/abd808d1c6d31b

乱数については、更に下記のスライドがめちゃくちゃ勉強になります。zeriyoshi さんに感謝

https://speakerdeck.com/colopl/colopltech-04-02

PHP: rfc:true-type

Accepted です。 null 型 false 型 と共に、true 型も 8.2 で入ります。

https://wiki.php.net/rfc/true-type

PHP: rfc:partially-supported-callables-expand-deprecation-notices

callble 関連で、記法の統一が提案されていましたが、付随して callable 周りの Deprecation Notice を充実させようという RFC です。Accepted なので入ります。多分、8.2 なのではないかな???

https://wiki.php.net/rfc/partially-supported-callables-expand-deprecation-notices

関連 RFC はこちら

https://wiki.php.net/rfc/deprecate_partially_supported_callables

Bugs

The influence of opcache on the behavior of enum cases. · Issue #8418 · php/php-src

https://github.com/php/php-src/issues/8418

<?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

https://github.com/php/php-src/pull/8190/files

要するに最初のコンパイル時に静的に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

https://github.com/php/php-src/issues/8281

https://3v4l.org/nSVPB

てきめんさんが上げていた Issue
日本人 PHPer 軍団の尽力もあり、修正されて無事にマージされた。

https://github.com/php/php-src/pull/8719

コミュニティを維持して、こういったイシューを上げたり、サポートしたりできる人を増やしていくことは大事だなと思った。

Intl not working with ICU 71.1 in Alpine 3.16 · Issue #8817 · php/php-src

https://github.com/php/php-src/issues/8817

Alpine が icu のデータセットを英語とそれ以外で分けてしまった。
デフォルトは英語しか入らないため、Alpine ベースのコンテナで、マルチバイト的な扱いを ICU に依存していたやつらが火を吹いた件

https://github.com/docker-library/php/issues/1302

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

https://github.com/php/doc-en/issues/1631

恥ずかしながら、MySQL の Year 型を知らなかった。
そして、知らなかった型の戻り値の方が、知らぬ間に int から string に変わっていた。

そもそもが、Year 型が 0パディングされた4桁の数字文字列だったらしいので、string で返るのが正しいとのこと。

Incorrect timestamp parsing · Issue #8809 · php/php-src

https://github.com/php/php-src/issues/8809

月に3桁の数字を入れるとパースがおかしいという報告。
これは、timelib が正しくパースするようになった結果なので、BC ブレークではあるが、won't fix 案件

そもそも、文字列という融通無碍なものをパースする時点で、全員が納得する方向性はないんだなというのが、イシューを見続けた感想

Discussion