LoginSignup
0
0

json_encode($example);(←何故か変換できない)

Posted at

何故か変換できない

ひゃっはー、php8.1でenum使えるようになっとるやん。
早速、使ってみたろ…。

いやぁ、見事にハマりました。
エラーも出ないし、ネタっぽいですがマジで何故か変換できないですw
割と、ハマりどころな可能性もあるのでメモを残しておきたいと思います。

兎にも角にも問題のコード

enum Type {
    case A;
    case B;
}

class Example {
    public Type $type;
    public string $id;
    public string $name;

    public function __construct(Type $type, string $id, string $name) {
        $this->type = $type;
        $this->id = $id;
        $this->name = $name;
    }
}
$example = new Example(Type::A, "test name", "test id");
echo json_encode($example);
// 期待する出力
// {"name":"test name","id":"test id","type":"A"}

ここのハマりどころは、json_encodeが文句を言わないところです。
enumが変換出来ていない事に気づくには、小一時間かかりました。(結構複雑なコードだったので除外するのに時間が掛かった)
そして、サンプルコードを準備してclaudeに質問するズバリ解決方法を教えてくれました。

結論、enumはそのままでは変換できない

コードの問題は、enumのエンコードらしいので、以下の様にJsonSerializableを実装する必要があるようです。
知らなければ対処不能ですね。

enum Type implements JsonSerializable {
    case A;
    case B;

    public function jsonSerialize(): mixed {
        return $this->name;
    }
}

超個人的な雑談と感想

仕事で結構、生成AIを利用するようになりました。
色んな生成AIありますが、私が主に利用しているのは、Claude, ChatGPT, Geminiです。
今年にはいってから、ハルシネーション問題も大分少なくなった気がするのは気のせいでしょうか。
ますます、仕事がはかどっちゃいますよね?

さて、そんな生成AIの個人的な感想を残しておこうかと思います。

2024年06月の利用した無料版の生成AIの個人的な感想として
Claude > ChatGPT > Gemini
今月の回答精度は、ChatGPTよりClaudeが良かった感じです。

ちなみに、2024年04月の利用した感想は
ChatGPT > Claude > Geminiでした

※あくまでもこの感想は、コード生成の結果のみのことなので他の生成物に関しては別の感想を持つ可能性があります。

0
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
0
0