Overview

Namespaces

  • NGS
    • Client
      • Exception
    • Converter
    • Patterns
  • PHP

Classes

  • BigDecimalConverter
  • BigIntConverter
  • ByteStreamConverter
  • LocalDateConverter
  • MoneyConverter
  • ObjectConverter
  • PrimitiveConverter
  • TimestampConverter
  • UUIDConverter
  • XmlConverter

Interfaces

  • ConverterInterface
  • Overview
  • Namespace
  • Class
  • Tree
 1: <?php
 2: namespace NGS\Converter;
 3: 
 4: require_once(__DIR__.'/ConverterInterface.php');
 5: require_once(__DIR__.'/../Name.php');
 6: require_once(__DIR__.'/../Patterns/IDomainObject.php');
 7: 
 8: use NGS\Name;
 9: use NGS\Patterns\IdomainObject;
10: 
11: /**
12:  * Generic object converter, for converting objects/object arrays of unknown type
13:  */
14: class ObjectConverter implements ConverterInterface
15: {
16:     const JSON_TYPE = 'Json';
17:     const ARRAY_TYPE = 'Array';
18: 
19:     /**
20:      * Serializes object or object array to JSON
21:      *
22:      * @param object|array Object or object array
23:      * @return string JSON encoded string
24:      */
25:     public static function toJson($object = null)
26:     {
27:         if(is_object($object)) {
28:             $converter = self::getConverter($object, 'Json');
29:             return $converter::toJson($object);
30:         }
31:         else if(is_array($object)) {
32:             $items = array();
33:             foreach($object as $key=>$obj) {
34:                 if($obj === null) {
35:                     $items[$key] = null;
36:                 }
37:                 else if($obj instanceof IDomainObject) {
38:                     $converter = self::getConverter($obj, self::ARRAY_TYPE);
39:                     $items[$key] = $converter::toArray($obj);
40:                 }
41:                 else if(is_object($obj)){
42:                     $converter = self::getConverter($obj);
43:                     $items[$key] = $converter::toJson($obj);
44:                 }
45:                 else {
46:                     $items[$key] = $obj;
47:                 }
48:             }
49:             return json_encode($items);
50:         }
51:     }
52: 
53:     /**
54:      * Converts JSON to object
55:      *
56:      * @param  string $json
57:      * @return mixed Object instance
58:      */
59:     public static function fromJson($json)
60:     {
61:         $converter = self::getConverter($object, 'Json');
62:         return $converter::fromJson($json);
63:     }
64: 
65:     /**
66:      * Determines appropriate converter class for given object
67:      *
68:      * @param object $object
69:      * @param string $type Converter type; one of 'Json' or 'Array'
70:      * @return \NGS\Converter\ConverterInterface
71:      */
72:     public static function getConverter($object, $type=self::JSON_TYPE)
73:     {
74:         if(!is_string($object)) {
75:             $object = get_class($object);
76:         }
77:         else {
78:             $object = Name::toClass($object);
79:         }
80:         $names = explode('\\', $object);
81:         $class = array_pop($names);
82:         $namespace = implode('\\', $names);
83: 
84:         // NGS primitive types follow convention NGS\Converter\[type]Converter
85:         if($names[0]==='NGS') {
86:             require_once(__DIR__.'/'.$class.'Converter.php');
87:             return 'NGS\\Converter\\'.$class.'Converter';
88:         }
89:         else {
90:             // @todo should be replaced with generated objects toJson method
91:             return $namespace.'\\'.$class.$type.'Converter';
92:         }
93:     }
94: }
95: 
API documentation generated by ApiGen 2.8.0