I use this very often to convert a class to array and json. I thought I should post it here, it may help someone. 😀
trait Serializer
{
public function toArray()
{
return get_object_vars($this);
}
public function toJSON()
{
return json_encode($this->toArray());
}
}
How to use it.
Assuming you have a model of Person and would like to access it somewhere in your code as an array or json.
class Person
{
use Serializer;
private $id;
private $name;
public function setName($name)
{
$this->name = $name;
}
}
$person = new Person();
$person->setName("Isaac");
$arr = $person->toArray();
print_r($arr);
$json = $person->toJSON();
print_r($json);
I find this very convenient while developing rest api's.
Top comments (4)
You should implement the
JsonSerializableinterface (secure.php.net/manual/en/jsonseria...), then you can just pass your object tojson_encode()and it'll do the right thing. That'll also handle JSON serializing an array of them, without having to serialize each one manually (just serialize the array and it'll call thejsonSerializemethod on each one).Yah sure, but the downside of implementing
JsonSerializableis that i will need a different return value tojsonSerializein all of my models because i have to construct an array representation of the class every time.Good point. I forgot that traits can't implement interfaces in PHP. I use Hack at work, which is based on PHP but traits are able to implement interfaces when using Hack.
Very neat truck, cheers for sharing.