<?php
 
abstract class JsonDeserializer
{
    /**
     * @param string|array $json
     * @return $this
     */
    public static function Deserialize($json)
    {
        $className = get_called_class();
        $classInstance = new $className();
        foreach ($json as $key => $value)
            $classInstance->{$key} = $value;
        return $classInstance;
    }
    /**
     * @param string $json
     * @return $this[]
     */
    public static function DeserializeArray($json)
    {
        $items = [];
        foreach ($json as $item)
            $items[] = self::Deserialize($item);
        return $items;
    }
}
 
class MyObject extends JsonDeserializer
{
    /** @var string */
    public $property1;
 
    /** @var string */
    public $property2;
 
    /** @var string */
    public $property3;
 
    /** @var string */
    public $array1;
}
 
$objectInstance = new MyObject();
$objectInstance->property1 = 'Value 1';
$objectInstance->property2 = 'Value 2';
$objectInstance->property3 = 'Value 3';
$objectInstance->array1 = ['Key 1' => 'Value 1', 'Key 2' => 'Value 2'];
 
 
$deserializedInstance = MyObject::Deserialize($jsonSerialized);
				PD9waHAKCmFic3RyYWN0IGNsYXNzIEpzb25EZXNlcmlhbGl6ZXIKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRqc29uCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gRGVzZXJpYWxpemUoJGpzb24pCiAgICB7CiAgICAgICAgJGNsYXNzTmFtZSA9IGdldF9jYWxsZWRfY2xhc3MoKTsKICAgICAgICAkY2xhc3NJbnN0YW5jZSA9IG5ldyAkY2xhc3NOYW1lKCk7CiAgICAgICAgaWYgKGlzX3N0cmluZygkanNvbikpCiAgICAgICAgICAgICRqc29uID0ganNvbl9kZWNvZGUoJGpzb24pOwogICAgICAgIGZvcmVhY2ggKCRqc29uIGFzICRrZXkgPT4gJHZhbHVlKQogICAgICAgICAgICAkY2xhc3NJbnN0YW5jZS0+eyRrZXl9ID0gJHZhbHVlOwogICAgICAgIHJldHVybiAkY2xhc3NJbnN0YW5jZTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkanNvbgogICAgICogQHJldHVybiAkdGhpc1tdCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gRGVzZXJpYWxpemVBcnJheSgkanNvbikKICAgIHsKICAgICAgICAkanNvbiA9IGpzb25fZGVjb2RlKCRqc29uKTsKICAgICAgICAkaXRlbXMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkanNvbiBhcyAkaXRlbSkKICAgICAgICAgICAgJGl0ZW1zW10gPSBzZWxmOjpEZXNlcmlhbGl6ZSgkaXRlbSk7CiAgICAgICAgcmV0dXJuICRpdGVtczsKICAgIH0KfQoKY2xhc3MgTXlPYmplY3QgZXh0ZW5kcyBKc29uRGVzZXJpYWxpemVyCnsKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHVibGljICRwcm9wZXJ0eTE7CiAgICAKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHVibGljICRwcm9wZXJ0eTI7CiAgICAKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHVibGljICRwcm9wZXJ0eTM7CiAgICAKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHVibGljICRhcnJheTE7Cn0KCiRvYmplY3RJbnN0YW5jZSA9IG5ldyBNeU9iamVjdCgpOwokb2JqZWN0SW5zdGFuY2UtPnByb3BlcnR5MSA9ICdWYWx1ZSAxJzsKJG9iamVjdEluc3RhbmNlLT5wcm9wZXJ0eTIgPSAnVmFsdWUgMic7CiRvYmplY3RJbnN0YW5jZS0+cHJvcGVydHkzID0gJ1ZhbHVlIDMnOwokb2JqZWN0SW5zdGFuY2UtPmFycmF5MSA9IFsnS2V5IDEnID0+ICdWYWx1ZSAxJywgJ0tleSAyJyA9PiAnVmFsdWUgMiddOwp2YXJfZHVtcCgkb2JqZWN0SW5zdGFuY2UpOwoKJGpzb25TZXJpYWxpemVkID0ganNvbl9lbmNvZGUoJG9iamVjdEluc3RhbmNlKTsKdmFyX2R1bXAoJGpzb25TZXJpYWxpemVkKTsKCiRkZXNlcmlhbGl6ZWRJbnN0YW5jZSA9IE15T2JqZWN0OjpEZXNlcmlhbGl6ZSgkanNvblNlcmlhbGl6ZWQpOwp2YXJfZHVtcCgkZGVzZXJpYWxpemVkSW5zdGFuY2UpOw==