LoginSignup
3
0

PHP ぼやき日記 2023-12-13

Last updated at Posted at 2023-12-13

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

nielsdos のひとが FFI 周りをわりと見ている

AMPHP の非同期 DB 接続ライブラリの新しい beta が出てる

デジ庁サイトが Next.js から Drupal になったらしい

PHP にローカルスコープの const みたいなの要るかなあ

  • このへんの会話であらためて「要るかなあ」というのを思った
  • 実装は多分そこまで難しくない、が、RFC プロセスでメリットを主張するのが難しい
    • 定数式の解決はやや魔境じみてるけどまあ、それでも実装についてはやってやれないほどではない
  • あれば使う気がするけど、「ないと困るでしょ!」という主張をしづらい
  • 誰か「ローカルスコープの const があればこんなに良いことが!」みたいな嬉しさを抱えている人がいればそれを俺に教えてほしい
  • JS (EcmaScript) にローカル const が入ることになった経緯がわかると参考になるかな、と思って以前に少し調べたこともあるのだけど、ES 3.1 とかの頃の話になって議論・経緯がめちゃくちゃ追いづらいということだけが分かっている
    • 一部のセマンティクス・設計選択については話の見つかった部分もあり、このへんの es-discuss の過去ログを漁ることになるのかなという気はする
    • もうちょっと探したらセマンティクスの議論をする 2007-06-20 のチケットは見つかった
    • またこっち を見ると 3/4 のブラウザで存在した機能が標準化された流れ、なのか……?
    • 先行してブラウザベンダが勝手に実装していたというのはあるとして、なんだかどうも基本的な欲求としては「write once……イイよね……」以上のものがないのではという気もしてきている
    • この流れならワンチャン Firefox や Safari のコミットログを追うともっと分かる可能性があるのでは?
    • Firefox は 1999-11-12 の Brendan Eich のコミットに const 追加が急に含まれているようだ
      • JS_HAS_CONST の定義やコメントから見ると JS2 の機能を JS_VERSION == 150 で先取りするもののようだ
      • 1999-5-11 の段階ではもう JS 2 として構想に入ってる
      • その JS 2 構想をコミットしてる人(Brendan Eich のあとに Netscape の言語設計者となりまた JS の標準化を進めたりもした Waldemar Horwat)による JS 2 の夢を語るスライド に const が出てる感じを見ると、誤りを防ぐための const 導入にあたって hoisting で別の分岐ブロックでの宣言が問題となるみたいなシナリオを避けるようローカルスコープ(ブロックスコープ)での導入とした、という流れのもよう
      • これが JS 2.0 (ES4) からこぼれだして拡張として Firefox (というか Mozilla) の JS 1.5 実装へ入った、というのが結局は ES 3.1 提案の話にも出てきて、その後継であるところの ES5 には入りそこね、最後は ES6 へ入った、という流れ
      • Safari (というか WebKit) のほうは 2005-06-16 のチケットで提案されて 2005-06-21 のコミットで実装が入ってそう、またテストケースには Mozilla 側と同じのを使ってそう
      • PHP さんにも「write once……イイよね……」くらいで提案して別に良いのではないかという気もしてきたな……

"Why we don't use return types on controller actions" を見て「どうかなあそれ」と思った

  • https://masteringlaravel.io/daily/2023-12-13-why-we-dont-use-return-types-on-controller-actions
  • Laravel のコントローラアクションはいろいろな型の値を返せるのでテキトーな 1 つを指定して型エラーが出るのは false positive だと言い張る人を見つけた
  • 返すものが変わるのはその action が満たすべき他部品との通信規約への明確な変更であり、また action の型宣言が例えば \JsonSerializable な型によって通信規約を表現して悪いことは何もないので、雑をやることへの無茶な言い訳に見えなくもない
  • 返り値型宣言はそのメソッドの実装の誤りを見つけるのが主眼で、アプリケーションの通信規約において何が誤りかを規定するのはフレームワークではなくアプリケーションである筈だ
3
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
3
0