こんにちはフロントエンドエンジニアのまさにょんです!
今回は、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!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!