🙄

今週の PHP 2024-05-04 〜 2024-05-24

2024/05/26に公開

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

Internal

PHP and MySQL 8.4 - Externals

MySQL 8.4がデフォルトで mysql_native_password プラグインを読み込まなくなり、CIテストの接続関連で失敗が発生。現時点では、テストコンテナでmysql:8.3を使用することで問題が解決されるますが...というやつ

これ、近い将来に必ず発生しそうな大問題なので、全PHPユーザーが頭に刻んだほうが良さそうです。Auroraとかだときっとプログインを読み込んでおいてくれたりサービスしてくれるのかなぁ...

PHP: rfc:class-naming-acronyms

クラス名頭字語の命名規則を合わせましょうというRFCです。投票が開始されましたが、承認されそうです。
PHP8.4がターゲットになっています。今後、新しく導入されるものについては一貫性のある名前付けが期待できそうです。

XMLHTTPRequestXmlHttpRequestIDCardIdCardが正しい表記になります。

リリース

PHP: rfc:new_without_parentheses

オブジェクト生成文をカッコで括らなくても、そのまんまメソッドを呼べるようにしようぜというRFCです。投票が開始されていました。承認されそうですね。個人的にすごく嬉しいです。

//現状
(new Hoge())->foo();
//提案
new Hoge()->foo();

PHP: rfc:exit-as-function

exit()、die()を言語構造から標準関数に変更する提案がRFCとして出てきました。この変更により、exitやdieがgotoラベルとして使用できるようになるそうです。

関数になるということは、callbackとかで使えるようになるってことなのか...使うの?という疑問もありつつ。
既存のソースコードに与える影響がすごく大きそう。今後を見守りましょう。

Stricter requirements for libxml - Externals

libxmlなんて、めっちゃ使うんだからビルドプロセス上で必須にしようぜという提案。物事というやつは、条件分岐がなくなると色々簡素化されるので良いですね。メンテナンスなどにかかる面倒くささを改善する提案です。良さそう。

Inconsistencies between parameter number and index when reflecting a method/function - Externals

Refelectionにおいて、インデックスが0始まり、1始まりで一貫性が無いので揃えようというお便り。揃えましょう揃えましょう。0始まり支持が多いようです。

PHP: rfc:array_find

callbackを引数にして、複雑な条件での配列検索を行う関数を標準関数として用意しましょうというRFCです。よく使われるユースケースなので標準で用意しようぜという感じですね。

RFC内で提案されている4つの関数 array_find, array_find_key, array_any and array_all について現状は全員一致で承認の方向です。

PHP: rfc:support_object_type_in_bcmath

アツイRFCが投票中です。BCMathオブジェクトが導入されるだけでなく、演算子オーバーロードされて計算できてしまうという実装どないなってまんねんという感じのやつです。(すいません、読みます)

丁寧な議論がされていた印象なので投票も承認の方向で流れております。良さそう。

[Discussion] Follow-up RFC for BCMath\Number object - Externals

上のBCMathオブジェクトが承認されたあとに必要になるであろう追加の議論についてのお便りです。下記のような内容が議論の対象のようです。

  • 64ビット整数型の内部使用による性能最適化
  • メソッドの命名規則の修正
  • 比較メソッドの公開の必要性
  • 既存のBCMath関数がBCMath\Numberを受け入れるべきかどうか
  • BCMath\Numberのブール型キャストの挙動
  • 公開予定のメソッドの必要性とその範囲
    (ChatGPTに書いてもらいました)

[Discussion] Why can't I do "{$a::class}"? - Externals

既存の文字列展開(っていう言葉であってる?)においてクラス定数なんかが使えないのはなんで?というお便りです。制限緩和できないか?などが話し合われています。

[Discussion] "Internal" attribute and warning - Externals

Internal というアトリビュートを作って、利用者に警告を発するような仕組みについての議論です。これをするならPackage Private のほうがいいな〜。

[DISCUSSION] Checking uninitialized class properties - Externals

クラスのプロパティが初期化されているかどうかをチェックする方法について議論がなされています。このへんは言語実装にも依るので以前も活発な議論がされていたのを覚えています。

is_initialized という関数が提案されていますが、まだまだ議論の余地が多そうです。

PHP: rfc:deprecated_attribute

Deprecated アトリビュート、及び sinceプロパティの追加について投票が開始されました。現状はちょっと反対もありつつ承認されそうです。

PHP: rfc:xmlreader_writer_streams

もしかしたら、以前も紹介したかもしれませんが、XMLReader, XMLWriterに openStream関数を追加して、ストリームをそのまま処理できるように機能を強化しようというRFCです。現在は実装の詳細について話し合われています。

PHP: rfc:dom_additions_84

DOM操作の利便性向上のRFCです。ノード操作の簡素化などが目指されているようです。

Switching max_execution_time from CPU time to wall-clock time and from SIGPROF to SIGALRM - Externals

私の不得意分野です。ChatGPTさんによると、下記のように説明されています。

macOSのApple Silicon上でmax_execution_timeをCPU時間から実時間(壁時計時間)に変更し、SIGPROFからSIGALRMに切り替えるものです。これにより、タイムアウトが早すぎる問題を修正します。主要な変更点として、I/Oやsleep()の時間もmax_execution_timeに含まれるようになります。この変更は互換性の影響が最小限に抑えられ、全プラットフォームへの展開も検討されています。

良くわからん...

Subject Prefixes - Externals

internalsにおいて、RFC, VOTE 以外のプレフィックスをタイトルに付けなくてもいいよ!というお便り。いや!つけたいよ!って人もいまして、まあメールのタイトルだし、規制は難しそうだなという気持ち。

例えば、 [Discussion] - Externals これとかプレフィックスしかないやつとかは、確かに困りますね。

[Discussion] - Externals

タイトルは相談。ですが、中身はEnum型の機能についてです。Backed Enumのfrom, tryFromを普通のEnum型にも追加しようというものです。これは、Enum型とBacked Enum型の差異を有耶無耶にするものなので、私は否定的です。

議論内でもEnumは、型であって「高級な文字列」ではないんだぜ?というやり取りがあります。

PDO subclass names - Externals

PDOのサブクラス名を下記のように変更しましょうという提案です。

PdoMysql => PDO\Mysql
PdoPgsql => PDO\Pgsql
PdoSqlite => PDO\Sqlite
PdoOdbc => PDO\Odbc
PdoDblib => PDO\Dblib
PdoFirebird => PDO\Firebird

議論のネタ元となったRFCも紹介されています。

PHP: rfc:namespaces_in_bundled_extensions

すでに承認されたPDOサブクラスのRFCがありPHP8.4でリリースされる見込みなので、この変更を行う場合は、今が絶好の機会です。

PHP: rfc:pdo_driver_specific_subclasses

Discussion