1: | <?php |
2: | |
3: | /* |
4: | * Yate core products API wrapper library |
5: | * (c) Alexey Pavlyuts <alexey@pavlyuts.ru> |
6: | */ |
7: | |
8: | namespace Yate\Api; |
9: | |
10: | /** |
11: | * Represent API call result |
12: | * |
13: | * This class allows to access API answer fields either as associative array |
14: | * elements and as class properties. |
15: | * |
16: | */ |
17: | class ApiResponse implements \ArrayAccess |
18: | { |
19: | |
20: | protected array $result; |
21: | |
22: | /** |
23: | * Populates instance with API answer data |
24: | * |
25: | * @param array $result |
26: | */ |
27: | public function __construct(array $result) |
28: | { |
29: | $this->result = $result; |
30: | } |
31: | |
32: | /** |
33: | * Returns API answer as associative array |
34: | * |
35: | * @return array |
36: | */ |
37: | public function asArray(): array |
38: | { |
39: | return $this->result; |
40: | } |
41: | |
42: | // Methods to allow array-like and property-like access |
43: | public function offsetExists($offset): bool |
44: | { |
45: | return isset($this->result[$offset]); |
46: | } |
47: | |
48: | public function offsetGet($offset) |
49: | { |
50: | return $this->result[$offset] ?? null; |
51: | } |
52: | |
53: | public function offsetSet($offset, $value): void |
54: | { |
55: | // Do nothing, data read-only |
56: | } |
57: | |
58: | public function offsetUnset($offset): void |
59: | { |
60: | // Do nothing, data read-only |
61: | } |
62: | |
63: | public function __get($name) |
64: | { |
65: | return $this->result[$name] ?? null; |
66: | } |
67: | |
68: | public function __isset($name) |
69: | { |
70: | return isset($this->result[$name]); |
71: | } |
72: | |
73: | public function __set($name, $value) |
74: | { |
75: | // Do nothing, data read-only |
76: | } |
77: | |
78: | public function __unset($name) |
79: | { |
80: | // Do nothing, data read-only |
81: | } |
82: | } |
83: |