Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPの型システムが言ってることがわからない

スー
June 21, 2024
130

 PHPの型システムが言ってることがわからない

PHPのドキュメンテーションにおいて

PHP は部分型の関係を満たしつつ(behavioral subtyping)、 名前ベースで一致を調べる型システム(nominal type system) を採用しています。 部分型の関係はコンパイル時にチェックされますが、 型の検証は実行時に動的に行われます。

PHP の型システムは、様々な基本型(atomic type)をサポートしており、 それらを組み合わせてより複雑な型を作ることができます。 そうした複雑な型の一部については、 型宣言 時に記述できます。

という記述があります。behavioral subtypingやnominal type systemについて簡単にLTします!

スー

June 21, 2024
Tweet

Transcript

  1. behavi ral subtypi ng Square は Rectangle のサブタイプであり、Rectangle が 使用できる場所で

    Square も使用できます。 1 . Square は Rectangle の振る舞いを維持しています (getArea() メソッドの契約を守っています) 。 2 . printArea() 関数は、Shape インターフェースを実装した 任意のオブジェクトで動作します。 3 .
  2. 余談1: Gener i cs Generics 1 . 言語に取り入れるRFCが実はあるが、動いてない a. https://wiki.php.net/rfc/generics

    (Draft) i . https://github.com/PHPGenerics/php- generics-rfc/issues/45 ii . https://github.com/nikic/php-src/pull/3 iii . phpstanやmrsuh/php-genericsといったライブラリで 現在は取り入れられていることが多いですよね! b. 2 .
  3. 余談2: まだまだPHPの型の怪しいところ 型の相互変換(TypeJuggling) 型の機能自体が 値の型そのものを見ているわけではなく、 値の内容が目的の型に変換できるかどうかでみている a. 受け入れられると型変換されると言った性質を持つ部分が あるため、このようなことが結構おきる b.

    日本に来てGina Peter Banyard(Girgias)さんがLTをし てくださった際にもTypeJugglingには言及されていて、 安全に型が使えるようにRFCを出してくださることが多い c . swisskyrepo/PayloadsAllTheThings にも例がある d.