🌟

今週の PHP 2024-03-23 〜 2024-03-29

2024/04/01に公開

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

Internal

Proposal: Make $offset of substr_replace null by default - Externals

PHP: substr_replace - Manual

この関数の第三引数をデフォルトnullにしようという提案のお便り。

デモのコードはこちら https://3v4l.org/6eEIG

nullを指定した場合は、第一引数の文末に置換指定した文字列を追記する形になります。文字列連結じゃだめなのかな??すこし、用途が異なるのではないかと思いました。

PHP: rfc:support_object_type_in_bcmath

細かい仕様のやりとりが行われています。なんとなくいい雰囲気な気がしています。(実装は大変そうですが)

[RFC] [Discussion] Release cycle update - Externals

BCブレークな変更はどういうバージョンで入れられるのか?バグフィックスはマイナーアップデートなのか?などのやりとりがまたなされています。デリックさんがリリースに関するドキュメントを書き直しているということなので、そのタイミングでRFCが改定される? or 新しいRFCが出てきそうな雰囲気です。

今後のPHPバージョンアップ戦略に関わる話なので、継続的にウォッチしておきます。

PHP: rfc:grapheme_str_split

書記素単位での文字分割関数についてのRFCについて、気になったコメント。

I think a big part of the problem is that very few people dig into the
complexities of text encoding, and so don't know that a "grapheme" is
what they're looking for.

意訳 「大半の人がテキストエンコーディングの複雑さについて深く理解していないのが大問題だ。書記素が彼らが探しているものであることに気づいていない」

はい、その通り、私もふがふがした理解しかしていません。同ポストにユニコードのドキュメントはそのへん詳しく定義していると書いてあるので、ちょっと読んでみようと思いました。

Allow properties to be defined on interface - Externals

Readonlyプロパティがあるのだから、interfaceでプロパティの定義ができるようになると捗るよね?というお便り。Getメソッドを定義しなくてすむので、記述がすっきりしますね。

でもって、それproperty hooks のRFCに含まれているよというアンサー

PHP: rfc:property-hooks

コード例

interface I
{
    // An implementing class MUST have a publicly-readable property,
    // but whether or not it's publicly settable is unrestricted.
    public string $readable { get; }
}

ちょっと話がでかくなったなと思いましたが、property hooksがコケたら、個別に議論ですかね。

PHP: rfc:dedicated_stream_bucket

新しいRFCです。ストリームでのデータIOをchunkして行うのに適した専用クラスの追加??ということのようです。あまり詳しくない分野なので理解が浅いです。

[RFC idea introduce] The issue where the __callStatic magic method is not called when statically calling a public method. - Externals

__callStatic マジックメソッドの挙動に関する新しいRFCの提案です。

コード例を見るのが一番早いです。このようなクラス定義があった場合に

class MyClass
{
public static function __callStatic($method, $args)
{
echo $method . "\n";
}

private function privateMethod() {}
protected function protectedMethod() {}
public function publicMethod() {}
}

MyClass::privateMethod();
MyClass::protectedMethod();
MyClass::publicMethod();

現状

privateMethod
protectedMethod
Fatal error: Uncaught Error: Non-static method MyClass::publicMethod()
cannot be called statically in ...

改善提案後

privateMethod
protectedMethod
publicMethod

でも、 __call のマジックメソッドは、そもそも到達不能なメソッドに対するものだから、ちょっとこの提案はよくわからないなと思うなどしました。定義がなければ、上のコードは普通に動きます。

https://3v4l.org/ual1K

Discussion