今週の PHP 2024-04-06 〜 2024-04-19

2024/04/20に公開

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

Internal

PHP: rfc:property-hooks

投票始まりました!
濃密で丁寧なコミュニケーションのすえに、完全に承認されそうな勢いです。
まじかぁ、あの文法使えるんか〜〜〜!って感じです。

PHP: rfc:array_find

array_findというは新しい関数の提案についてです。どんな内容なのかというと、下記の通りです。

function array_find(array $array, callable $callback, bool $return_array_key = false): mixed {
    foreach ($array as $key => $value) {
        if ($callback($value, $key)) {
            return $return_array_key ? $key : $value;
        }
    }
 
    return null;
}

コールバックで、配列の検索を行えるというのがポイントでしょうか。配列の中身がmixedだから、戻り値もmixedです。何も見つからなかったときはnull。うーむPHP。

[VOTE] PHP 8.4 Release Managers - Externals

原文ママですが、Sakiさんが8.4のリリースマネージャーにルーキー枠で入りました。素晴らしいですね。これ、8.4がEOLになるまでの役目なので、まじ大変なんです!みんなで応援するのだぞ!

Our "rookie" PHP 8.4 release managers are:

Calvin Buckley
Saki Takamachi
Our "veteran" is the PHP 8.3 release manager Eric Mann.

リリース

PHP: rfc:release_cycle_update

リリースサイクルが短すぎるので、セキュリティフィックスを1->2年にして、合計4年間にしましょうというRFCです。
投票が開始されました。

好意的に受けいられているようでしたが、投票もほぼ承認の方向です。

PHP: rfc:deprecate-get-post-sessions

GETとPOSTでSESSION IDをパラメーターに含めるオプションを非推奨にしましょうというRFCです。
問題なく承認されそうです。

ガラケー時代にはお世話になった人がいそうですね。

PHP: rfc:new_without_parentheses

あるあるネタですが、現状のPHPの文法ではインスタンス生成と同時にメソッド等をコールする場合は、括弧で囲む必要があります。

(new Foo())->bar();

それを、括弧で囲まなくても良いようにしようというRFCです。

new Foo()->bar();

PHPの問題というよりは字句解析の変更になりそうですね。実際のPRを見ても、parserに変更が入っています。

https://github.com/php/php-src/pull/13029/files#diff-3e6742a9069b5717cf961c9d6b2aefbd1c730869d8a58123b1b5f3bc3e9082fc

個人的には、後方互換性が保たれているのなら、ぜひ入れてほしい提案です。

PHP: rfc:grapheme_str_split

書記素分割のメソッド提案が承認されました。grapheme_str_splitが追加されます。

Introduce ReflectionConstant - Externals

グローバル定数を参照する専用のReflectionクラスを作りましょうというお便り&参考実装スレ。
自分は使いたいと思ったタイミングが無いのでわからんのですが、きっと必要なのだろう(すまん、わからん)

PHP: rfc:dedicated_stream_bucket

StreamBucketクラスの提案ですが承認されました。全会一致。

[proposal] max_execution_time to a negative number - Externals

max_execution_time に負の数が設定できるのは良く無いじゃん?っていうお便り

提案としては負の数を設定したら0にする。PHP9.0ではエラーにするというものですが、この辺はRFCを立てて議論すると良さそうですね。大きすぎる値を設定した場合も予期せぬ挙動になってしまうということです。

まあ、変な値を自ら設定することはないもんね。悪意のあるコードとして実行時設定をいじられる可能性あるので、丁寧に潰しておくと良さそうと思いました。

Native decimal scalar support and object types in BcMath - do we want both? - Externals

ネイティブの10進サポートが必要なの?BcMathのオブジェクト型が必要なの?両方なの?というスレッド。いろんな話がされていまして、ZValが64bitの制限があるよとか、この先、2つの議論をどうしていくの?などです。

興味ある方は、元スレッドをじっくり読むと勉強になりそうです。

[PHP-CVS] [php-src] master: ext/mysqlnd: support ER_CLIENT_INTERACTION_TIMEOUT - Externals

MySQLの新しいエラータイプへの対応がDBALのテストを壊しているよというお便り。つまり、今後この修正が取り込まれたPHP8.2, 8.3がリリースされるとDBALが壊れる可能性があるということです。

元になった修正のイシューはこちらのようです。

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

PHP: rfc:pdo_driver_specific_parsers

PDOにDriverそれぞれに特化したパーサーを使えるようにしようというRFCです。MySQL以外のデータベースにおいて特定のリテラルでバグが出たりするようです。PHPといえばMySQLみたいな風潮がありますが、他のデータベースでも不具合が減ることは良いですね。

Incorrect terminology usage for rounding modes of round() - Externals

数値の丸めに関する言葉の使い方を修正するために、新しいenumを導入しようという話です。誤解を減らすこういう小さい改善は大切ですね。

Discussion