1: <?php
2:
3: /**
4: * This file is part of expect package.
5: *
6: * (c) Noritaka Horio <holy.shared.design@gmail.com>
7: *
8: * This source file is subject to the MIT license that is bundled
9: * with this source code in the file LICENSE.
10: */
11:
12: namespace expect;
13:
14: use \OutOfBoundsException;
15: use \Countable;
16:
17: final class Dictionary implements Countable
18: {
19:
20: private $values;
21:
22: public function __construct(array $values = [])
23: {
24: $this->values = $values;
25: }
26:
27: /**
28: *
29: *
30: * @param string $value
31: *
32: * @return boolean
33: */
34: public function containsKey($key)
35: {
36: return array_key_exists($key, $this->values);
37: }
38:
39: /**
40: * @param string $value
41: * @return mixed
42: */
43: public function get($key)
44: {
45: if (!$this->containsKey($key)) {
46: throw new OutOfBoundsException('No element at position ' . $key);
47: }
48:
49: return $this->values[$key];
50: }
51:
52: public function set($key, $value)
53: {
54: $this->values[$key] = $value;
55: return $this;
56: }
57:
58: /**
59: * @return int
60: */
61: public function count()
62: {
63: return count($this->values);
64: }
65:
66: public function toArray()
67: {
68: return $this->values;
69: }
70:
71: public static function fromArray(array $values = [])
72: {
73: $defaultValues = [];
74:
75: foreach ($values as $key => $value) {
76: if (is_array($value)) {
77: $defaultValues[$key] = new static($value);
78: } else {
79: $defaultValues[$key] = $value;
80: }
81: }
82:
83: return new static($defaultValues);
84: }
85:
86: }
87: