1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP ぼやき日記 2023-12-19

Last updated at Posted at 2023-12-19

不定期に誰に向けるでもなく PHP に関する雑な殴り書きをしている。日付が変わってから変わる前の日付の奴だと言い張って投稿するくらいの雑さ加減。

Reli 0.11.0 をリリースした

OSS で memory_limit 超過の issue を見つけては急にメモリ計測をとって去っていく PHP 界の妖怪としての活動もちょっとした

  • https://github.com/PHPOffice/PhpSpreadsheet/issues/3814#issuecomment-1862367771
  • "A possible optimization" として挙げていて PR で実装してるのはいわゆる zero page optimization 的な dedupe の仕組みを念頭に置いてる
  • PHP の配列は CoW なので、ほぼ同じ発想でいけるな、みたいな
  • OS や libc のメモリ管理と同じだなと考えると、CoW のコピーを実際に発生させないために PHP の配列を直接書き換えず配列内の要素と何らかの形で関連付けた mutable なデータを別で書き換える、とかの ELF の PIC 的な発想もどこかで活きることがあるのかもしれない

PHP の readonly クラスは諸事情により簡単にモックできない

  • PHPUnit にはできない
  • Mockery にもできない
  • 個人的にはなんでできないのかよく分からない
  • readonly クラスは readonly クラスでしか継承できず、よくあるモックライブラリはモック対象の子クラスのコードを動的に生成して読み込むような形で元クラスと互換性のある型を作って機能しているので、生成コードを非 readonly クラスと共通化できないのは分かる
  • ただ状態は別クラスへ分離してメンバで持てばよいだけで(PHP の readonly は中身まで immutable になるわけではない)、readonly クラスの子は通常クラスと別の形で生成しないといけない制約も元々あるわけなので、特に困らないような気もする
  • それっぽいのを試してみてもふつうに動くので、全然やればできそうな気するけど、皆単に時間がないのか技術的な制約があるのか
  • とりあえず readonly 対応のモックライブラリみたいなの作るなら今がチャンスな気がするので、暇なひとは作ってみるのがよいです
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?