【PHP】ClassのインスタンスをJSON化する際の注意点(private, protected)

Class_JSON

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、PHPでClassのインスタンスをJSON化する際の注意点について解説していきます。

PHPでClassのインスタンスをJSON化する際の注意点

ClassのインスタンスをJSON化すると、private, protected, メソッドなどのデータは消えるので注意してください。

ちなみに、JSON文字列をデコードしても、stdClassになっており、Classが切り替わっていることがわかります。

<?php

// 1. Robotama-Class
class Robotama{
    private $id = 1;
    public $name = "ロボ玉";
    public $like = "ひまたね";
    private $puru = true;
    public $from = "グンマー帝国";
    protected $rival = "白桃さん";
    public $cost = 5000;

    public function getId () {
        return $this->id;
    }

    public function getRival () {
        return $this->rival;
    }

    public function getPuru () {
        return $this->puru;
    }
}
 
// 2. Robotama-インスタンス
$robotama = new Robotama();

var_dump($robotama);
echo "\n";
// [ 出力結果 ]
// object(Robotama)#1 (7) {
//     ["id":"Robotama":private]=>
//     int(1)
//     ["name"]=>
//     string(9) "ロボ玉"
//     ["like"]=>
//     string(12) "ひまたね"
//     ["puru":"Robotama":private]=>
//     bool(true)
//     ["from"]=>
//     string(18) "グンマー帝国"
//     ["rival":protected]=>
//     string(12) "白桃さん"
//     ["cost"]=>
//     int(5000)
//   }

// 3. protectedもGetterメソッド経由で取得できる
echo $robotama->getRival();
echo "\n";
// [ 出力結果 ]
// 白桃さん


// 4. JSON-String
$json_tama = json_encode($robotama, JSON_UNESCAPED_UNICODE);
var_dump($json_tama);
echo "\n";
// [ 出力結果 ]
// string(82) "{"name":"ロボ玉","like":"ひまたね","from":"グンマー帝国","cost":5000}"


// 5. JSON-Decode => stdClassに変わっている・・・
$new_tama = json_decode($json_tama, false);
var_dump($new_tama);
echo "\n";
// [ 出力結果 ]
// object(stdClass)#2 (4) {
//     ["name"]=>
//     string(9) "ロボ玉"
//     ["like"]=>
//     string(12) "ひまたね"
//     ["from"]=>
//     string(18) "グンマー帝国"
//     ["cost"]=>
//     int(5000)
//   }


// 6. Error-発生 => Getterメソッドは、消滅している・・・
echo $new_tama->getRival();
echo "\n";

Twitterやってます!Follow Me!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

PHP / Laravel書籍

最近の投稿