このツールの動作
JSON の標本が、構築子でプロパティを昇格させた PHP のクラスになります。
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
<?php
declare(strict_types=1);
class Root
{
public function __construct(
public int $id,
public string $firstName,
public Address $address,
) {
}
}
プロパティの昇格には PHP 8.0 が、readonly の設定には 8.1 が要ります。declare(strict_types=1) はわざと置いています。これが無ければ、PHP は文字列を黙って int の引数に変換し、型を書いた意味そのものが失われます。
名前を変えた項目は、鍵を保つ
ここでのプロパティ名は camelCase です。ハイフンを含む鍵や数字で始まる鍵は、名前としては生き残りません。そのとき、鍵が隣に書かれます。
/** JSON key: "content-type" */
public string $contentType,
public int $fooBar,
/** JSON key: "foo-bar" */
public int $fooBar2,
最後の二つがその理由です。fooBar と foo-bar はどちらも $fooBar を求めるので、二つ目は $fooBar2 になります。注釈が無ければ、どちらがどの鍵から来たのかを述べるものが、ファイルのどこにもありませんでした。PHP にそれを担う標準の属性は無いので、注釈が担います。名前が鍵を保てなくなった場所にだけ付きます。
これは本当の欠落でした。この文章を書く過程で見つけました。ここに並ぶ生成器のうち、鍵を完全に失っていたのは PHP だけです。Go にはタグが、Java と C# には注釈が、Swift には CodingKeys が、Dart には fromJson があります。
PHP が狭められないもの
- どの並びも
array。 この言語に総称型は無く、list<string>は PHPStan か Psalm の docblock に住みます。どちらをお使いかは、標本には知りようがありません。 nullと型の分からない値はmixed。 正直な型です。何でも受け取り、declare(strict_types=1)もそこでは助けになりません。項目の型が分かった時点で狭めてください。- 根が数値や文字列なら拒みます。 PHP に型別名は無く、
42や"テキスト"がなるべきものがありません。
標本が言えないこと
null を許すプロパティはなく、既定値を持つものもありません。文書がそれぞれに値を持っていたからです。二つ目の荷が「その鍵は無いこともある」と示したら、?string と = null に手を入れてください。そして、これらのオブジェクトが読むためのもので、埋めるためのものでないなら、readonly を入れる値打ちがあります。
プライバシー
すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。