📝

今週の PHP 2024-01-13 〜 2024-01-19

2024/01/19に公開

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

Internal

PHP: rfc:improve_callbacks_dom_and_xsl

dom, xsl の拡張に対するリファクタリングに関するRFCですが、賛成多数で可決されました。Internalでも好意的なやり取りがされていたので順当な感じですね。

[RFC][Discussion] Raising zero to the power of negative number - Externals

ゼロを負の数で累乗する場合の取り扱いに関する議論と、そのRFCです。

現状の仕様はたしかに一貫性がないです。

var_dump(0 ** -1); //float(INF)
 
var_dump(pow(0, -1)); //float(INF)
 
var_dump(1 / 0); //DivisionByZeroError: Division by zero

現在のRFCでは、上記をいずれもPHP9.0までに DivisionByZeroError に統一しようという方向で書かれています。

IEEE 754-2019 の7.3によると、0による除算は divide By Zero exception shall be signaled と書かれているので、RFCの提案内容は合致していますね。

余談ですが、NaNってIEEE 754で定義されているんだね!!!!今回始めて知りました。

PHP: rfc:mb_ucfirst

先週、相談メールが来ていたucfirstのマルチバイト版についてRFCが提出されました。

既存関数の安全なマルチバイト版追加です。

function mb_ucfirst(string $string, ?string $encoding = null): string
function mb_lcfirst(string $string, ?string $encoding = null): string

リリース

PHP: rfc:final_by_default_anonymous_classes

PHPの匿名クラスをデフォルトでfinalにすることに関する提案(RFC)についての議論です。

投票状況は現在59%支持なので、かなり微妙な情勢です。議論の行方次第ではなんとか滑り込めるかも...

PHP: rfc:opt_in_dom_spec_compliance

DOM拡張を仕様に準拠させるという目的のRFCです。以前Internalで相談が来ていた件がRFCとして提出された形です。細かい実装内容についてのやり取りが進んでいます。

PHP: rfc:resource_to_object_conversion

Resourceをオブジェクトに変換するRFCですが、可決されました。メジャーバージョンでの対応が支持されているのでPHP9.0がターゲットになるようです。

Dedicated StreamBucket class - Externals

stream_bucket_new()がstdclassを生成するのはやめようというPRについての議論です。RFCとするかどうか、後方互換性維持などについて話されています。

PDO::FETCH_CONSTRUCTOR fetch mode proposal - Externals

PDOの新しいFetchモード PDO::FETCH_CONSTRUCTOR の提案に関する相談スレッドです。
既存のFETCH_CLASSが抱える問題点を解決し、SQLの結果をFETCHする際に、指定したクラスのコンストラクターに取得した値をセットするという挙動のようです。

相談スレッド内では、既存のFETCH_CLASSにAttributeを組み合わせる形はどうか?などの代替案も提案されています。

代替案のクラスの見た目はまさにDoctrineのEntityみたいですね。

readonly class User {
    public function __construct(
        #[PDOField('user_id')]
        public string $userId,
        #[PDOField('user_name')]
        public string $userName,
        #[PDOField('user_address')]
        public ?string $userAddress = '', // Optional field with default value
    );
}

この議論の行き着く先は不明ですが、DoctorinなどのORMがやっている処理がネイティブでサポートされるようになるかもしれないですね。面白そうな話なので、今後もウォッチしていきたいです。

Discussion