🦔

今週の PHP 2022/12/24 〜 2022/12/30

2023/01/17に公開約3,200字

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());

https://3v4l.org/gqbYL

二個目の var_dump ではエラーはリセットされているべきではというもの。 last だから最新のエラーが取れてもいいのではという気もしたけど、これリセットされないと、エラーかどうかの判断が正しくできないから駄目ですね。

ちなみに JSON_THROW_ON_ERROR を外すと、ちゃんとリセットされます。

https://www.php.net/manual/en/function.json-last-error.php

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 で壊れているというイシュー

https://3v4l.org/pIBuP#v8.2.1

指摘通り、8.2 系ではエラーがでます。

てきめんさんも指摘している通り、 hk は組み合わせることが可能なので、これは完全にバグ。
すでに修正されて 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

ログインするとコメントできます