今週の PHP 2022/12/24 〜 2022/12/30
PHP のメーリングリストから、気になった情報をピックアップします。
Internal
PHP build for the wasm32-wasi target - Externals
https://externals.io/message/119198
VMware の人が、wasm32-wasi をターゲットにした PHP を作っているという話です。フィードバックを求めているような感じですが、意図が曖昧なメールでよく分かりません。
wasm32-wasi ターゲットの PHP ということは、ブラウザで動く PHP というわけですが、アプリケーション自体じゃないから、これに意味があるのかどうかよくわからない。
mod-wasm と Apache で WordPress を実行と書いてあるので、この話の赴く先は Nginx Unit と似たようなものになりそう。ようするに、PHP の実行環境が一個増えますくらいの。
コミュニティからの返信も「PHPコードをwasmに変換しないと、意味なくない?」という反応でした。そうなるよね?
Methods which auto-return the class instance - Externals
https://externals.io/message/119200
self
を戻り値の型として指定されている場合に、自動で return $this
と同じ意味とするという提案について、話し合われています。
メソッドをチェーンさせる Fluent Interface をキレイに書けるみたいな話ですね。提案への反応は以下のような感じです。
- self では
$this
または、自分と同じクラス、サブクラス
の場合分けが発生するので、せめて$this
縛りが必要 - 特定の戻り値に対して、省略可能という特別ケースを追加する意味はあるのか?
- Scala 利用者の視点だと大反対。コードベースが大きくなると、暗黙の return はコードが読みにくい
- 戻り値省略の代わりに Dart のカスケード演算子はどうでしょうか
PHP は、Explicit over Implicit (暗黙よりも明白)を好む傾向にあると思うので、この提案が受け入れられる可能性は少なそうだなと感じます。暗黙は、読み手や書き手に「言語の深い理解」を強要するので、PHP のユーザーには不適切と感じます。
Bugs
Reset JSON_G(error_code) after calls with JSON_THROW_ON_ERROR · Issue #10166 · php/php-src
https://github.com/php/php-src/issues/10166
めもりーさんからのイシュー。
json_last_error
がリセットされていないというやつ
<?php
json_decode("\00invalid json");
var_dump(json_last_error());
json_decode("[]", true, 512, JSON_THROW_ON_ERROR);
var_dump(json_last_error());
二個目の var_dump
ではエラーはリセットされているべきではというもの。 last
だから最新のエラーが取れてもいいのではという気もしたけど、これリセットされないと、エラーかどうかの判断が正しくできないから駄目ですね。
ちなみに JSON_THROW_ON_ERROR
を外すと、ちゃんとリセットされます。
Returns the last error (if any) occurred during the last JSON encoding/decoding, which did not specify JSON_THROW_ON_ERROR.
現在の動作は、ドキュメントに書かれた仕様通りではあるけど、めもりーさんの指摘どおり、3rd Party ライブラリーでコレをやられると、エラーになりっぱなしになります。
というわけで、一瞬閉じられかけたけど、復活しました。しかし、動きはないが...
mb_convert_kana is broken in PHP8.2.0 · Issue #10174 · php/php-src
https://github.com/php/php-src/issues/10174
mb_convert_kana
が 8.2 で壊れているというイシュー
指摘通り、8.2 系ではエラーがでます。
てきめんさんも指摘している通り、 h
と k
は組み合わせることが可能なので、これは完全にバグ。
すでに修正されて master に入っているので、 8.2.2 では修正されます。
8.1 系は問題ないです。 https://3v4l.org/pIBuP#v8.1.14
Major Overhaul の影響ですね。
修正コミットはこちら
Improve mb_detect_encoding's recognition of Turkish text by alexdowad · Pull Request #10186 · php/php-src
https://github.com/php/php-src/pull/10186
mb_detect_encoding
がトルコ語にも対応したよというやつ。
code point, つまり文字列内に現れる特徴から検出するんですね。この辺、全然詳しくないので、そのうち中身を見てみたい。
Fix GH-10187: Segfault in stripslashes() with arm64 by nielsdos · Pull Request #10188 · php/php-src
https://github.com/php/php-src/pull/10188
stripslashes
が arm64 でセグフォールトするという件。アーキテクチャー依存のコードはこうやってあぶり出されてくる。
修正内容を見ると、変数の型がより一般的な形に修正されています。
Discussion