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
JsonSerializable
interface (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 thejsonSerialize
method on each one).Yah sure, but the downside of implementing
JsonSerializable
is that i will need a different return value tojsonSerialize
in 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.