🐷

今週の PHP 2023-12-09 〜 2023-12-15

2023/12/27に公開

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

Internal

bugs.php.net still active? - Externals

http://bugs.php.net/ は閉じるなり、読み取り専用にするなりしたほうが良いのでは?というお便り。

すでにチケットの作成は出来なくなっているという話でした。

[RFC][Discussion] NotSerializable attribute - Externals

PHP: rfc:not_serializable

#[NotSerializable] という新しいアトリビュートの提案に関するお便りです。

見るからに、このアトリビュートをつけるとシリアライズされなさそうな雰囲気です。

提案内容を見ると、下記のようにアトリビュートを指定したクラスはシリアライズ時に警告が出ます。

#[NotSerializable]
class MyClass
{
}
 
serialize(new MyClass()); // Exception: Serialization of 'MyClass' is not allowed

既存でそのような挙動を行う場合はマジックメソッドを利用します。

PHP: マジックメソッド - Manual

__wakeup __sleep メソッドを定義して、その中で例外を発生させれば同様の挙動になります。

現在の議論を簡単にまとめると

  • 大歓迎!いいアイデア!
  • traitでマジックメソッドを実装すれば同じことがスッキリ達成できるよ?
  • 継承でも効果をもたせるのは内部実装的に難しそう
  • 既存のserializeを利用するコードが壊れてしまうがいいのか?

しかし、反応としては概ね良さそうという方向性に見えます。丁寧に議論されていけば、受け入れられそうな気がします。

Are warnings guaranteed? - Externals

PHPの組み込み関数には、warningを必ず出すといった正式なルールはありますか?というお便り。
後方互換性の問題もあるので「無い」というのが答えになります。

warningを出さずにfalseを戻す関数も結構ありますね。ただ、falseを型として指定できるようになったので言語としては前進していると感じています。

PHP: rfc:null-false-standalone-types

Discussion