今週の PHP 2023-03-25 〜 2023-03-31
PHP のメーリングリストから、気になった情報をピックアップします。
Internal
Release Managers for PHP 8.3 - Externals
リリースマネージャー募集のお便り。何名か立候補されてますね。確か、やったことある人と初めての人の組み合わせという話だった気がする。
[RFC] Properties in interfaces - Externals
interface で property を定義できるようにしよう!というRFCの相談。
property名が競合したときにどうするのかな??
public なプロパティもインタフェースだよねという投稿者の意図は完全に理解できます。相談内では、PHP: rfc:property-hooksとの関連性について指摘されていますね。
現在進行系で仕様策定されているものに、合わせるのは大変そう。
Traits and redeclaring static properties - Externals
trait における static プロパティの再定義についてというお話。
とりあえず、通常の継承における static プロパティの場合。それぞれのクラスがそれぞれのプロパティを持ちます。
static プロパティをtraitで宣言して、継承関係のそれぞれのクラスで使用した場合
compile time copy & paste だから、これは合理的だというコメントが入っていたけど、compile時にコピペされたのなら、継承時のstatic プロパティと挙動は一緒のほうが、合理的じゃないかなぁ。
これはソースを読んでみたい案件
https://github.com/php/php-src/pull/10937
Githubのイシューが出ていて、どうやら、これは対応されるっぽいです。でもって、結局、どっちが正しいのかよく分からなくなってきた。
Bugs
Static properties in traits don't override static properties from parent class · Issue #10935 · php/php-src
static なプロパティが trait ではオーバーライドされていないというイシュー
- trait の例 https://3v4l.org/SClLn
- 継承時の例 https://3v4l.org/Dll1m
ご覧の通りで、継承時と挙動が異なります。これについては、trait の仕様策定時に定義されていなかったため、特に決まっていないというのが実情です。
Internal にも相談スレッドが出来ており、特に反対意見も無かったので、継承時の挙動に合わせることになりました。https://externals.io/message/119809
RFC ではなく、そのまま修正がマージされるようです。
Add AMPHP, ReactPHP, Revolt PHP in community job by arnaud-lb · Pull Request #10933 · php/php-src
Fiberを常用しているコミュニティのジョブを使って、Fiberをテストするようにしようというイシューです。まだ不安定なのでDraft扱いですが、実に良いことだなと思いました。
For UTF-7, emit error marker if Base64 section ends abruptly after first half of surrogate pair by alexdowad · Pull Request #10927 · php/php-src
pakutoma さんの ISO-2022-JP の PR 修正時に見つかったそうですが、サロゲートペア関連の細かい不具合修正です。UTF-7 ってそもそも使わないなと思いました...
7bitでユニコードを扱うための符号化スキームなのでした。知らなかった。
なるほど、メールで日本語を使う場合にも利用可能なのですね、であれば ISO-2022-JP に付随して見つかるのは、納得です。
IntlDateFormatter
returns wrong output for 1940 date in Amsterdam timezone · Issue #10898 · php/php-src
ext-intl を使った日付フォーマッタがアムステルダムのタイムゾーンで誤った結果を返すというもの。問題はPHPというよりは、ext-intl が依存しているICU4Cライブラリーということです。
Improved Bug Report for "header already sent" warning · Issue #10721 · php/php-src
session_start()
を使おうとしたけど、header がすでに送信されているから無理だよというエラーメッセージですが、どこで送信したのか教えてくれよ!というイシュー
Note where a session was already started by NattyNarwhal · Pull Request #10736 · php/php-src
すでに修正がマージされています。
修正されたエラーメッセージはめちゃくちゃわかりやすいです。
Notice: session_start(): Ignoring session_start() because a session is already automatically active in %s on line %d
session が自動開始された場合にファイル名、行数を教えてくれます。超便利。
Match with && operator · Issue #10971 · php/php-src
Match 式が複合条件を適切に判断しないのは、なぜですか?という質問
質問者のサンプルコードはこちら https://3v4l.org/KktKB#v8.2.4
<?php
$result = match('test') {
'test' && true => true,
'test2' && true => true,
default => false,
};
var_dump($result);
この結果は、false
になります。
なんでや? 'test' だから、true
でしょ?という質問。
結論から言うと、match 式の条件は、式としてそれ自体が評価されるので、上のコードは実質下記のようになります。
<?php
$result = match('test') {
true => true,
true => true,
default => false,
};
var_dump($result);
知らなかったんですけど、制約式にtrue
を入れると厳密じゃない比較が出来るんですね。
Unary minus const expression consistency by iluuu1994 · Pull Request #10978 · php/php-src
-0.0
がconstでは float(0)
と評価されてしまうという不具合。
すでに、PHP 8.2.6 以降では修正されています。
よく気づきますねというやーつ。詳しくないのですが、コメントには一貫性という記述があるので、数学的な話というよりはプログラムとして一貫性を持ちましょうという話だと理解しています。
Discussion