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: 13:
14: class ObjectConverter implements ConverterInterface
15: {
16: const JSON_TYPE = 'Json';
17: const ARRAY_TYPE = 'Array';
18:
19: 20: 21: 22: 23: 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: 55: 56: 57: 58:
59: public static function fromJson($json)
60: {
61: $converter = self::getConverter($object, 'Json');
62: return $converter::fromJson($json);
63: }
64:
65: 66: 67: 68: 69: 70: 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:
85: if($names[0]==='NGS') {
86: require_once(__DIR__.'/'.$class.'Converter.php');
87: return 'NGS\\Converter\\'.$class.'Converter';
88: }
89: else {
90:
91: return $namespace.'\\'.$class.$type.'Converter';
92: }
93: }
94: }
95: