ex
Fork of mbed-os-example-mbed5-blinky by
dumi_doc-master/schema/vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php@44:c1d8923072ba, 2017-07-18 (annotated)
- Committer:
- TMBOY
- Date:
- Tue Jul 18 16:27:22 2017 +0800
- Revision:
- 44:c1d8923072ba
?
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| TMBOY | 44:c1d8923072ba | 1 | <?php |
| TMBOY | 44:c1d8923072ba | 2 | |
| TMBOY | 44:c1d8923072ba | 3 | /* |
| TMBOY | 44:c1d8923072ba | 4 | * This file is part of the JsonSchema package. |
| TMBOY | 44:c1d8923072ba | 5 | * |
| TMBOY | 44:c1d8923072ba | 6 | * For the full copyright and license information, please view the LICENSE |
| TMBOY | 44:c1d8923072ba | 7 | * file that was distributed with this source code. |
| TMBOY | 44:c1d8923072ba | 8 | */ |
| TMBOY | 44:c1d8923072ba | 9 | |
| TMBOY | 44:c1d8923072ba | 10 | namespace JsonSchema\Iterator; |
| TMBOY | 44:c1d8923072ba | 11 | |
| TMBOY | 44:c1d8923072ba | 12 | /** |
| TMBOY | 44:c1d8923072ba | 13 | * @package JsonSchema\Iterator |
| TMBOY | 44:c1d8923072ba | 14 | * @author Joost Nijhuis <jnijhuis81@gmail.com> |
| TMBOY | 44:c1d8923072ba | 15 | */ |
| TMBOY | 44:c1d8923072ba | 16 | class ObjectIterator implements \Iterator, \Countable |
| TMBOY | 44:c1d8923072ba | 17 | { |
| TMBOY | 44:c1d8923072ba | 18 | /** @var object */ |
| TMBOY | 44:c1d8923072ba | 19 | private $object; |
| TMBOY | 44:c1d8923072ba | 20 | |
| TMBOY | 44:c1d8923072ba | 21 | /** @var int */ |
| TMBOY | 44:c1d8923072ba | 22 | private $position = 0; |
| TMBOY | 44:c1d8923072ba | 23 | |
| TMBOY | 44:c1d8923072ba | 24 | /** @var array */ |
| TMBOY | 44:c1d8923072ba | 25 | private $data = array(); |
| TMBOY | 44:c1d8923072ba | 26 | |
| TMBOY | 44:c1d8923072ba | 27 | /** @var bool */ |
| TMBOY | 44:c1d8923072ba | 28 | private $initialized = false; |
| TMBOY | 44:c1d8923072ba | 29 | |
| TMBOY | 44:c1d8923072ba | 30 | /** |
| TMBOY | 44:c1d8923072ba | 31 | * @param object $object |
| TMBOY | 44:c1d8923072ba | 32 | */ |
| TMBOY | 44:c1d8923072ba | 33 | public function __construct($object) |
| TMBOY | 44:c1d8923072ba | 34 | { |
| TMBOY | 44:c1d8923072ba | 35 | $this->object = $object; |
| TMBOY | 44:c1d8923072ba | 36 | } |
| TMBOY | 44:c1d8923072ba | 37 | |
| TMBOY | 44:c1d8923072ba | 38 | /** |
| TMBOY | 44:c1d8923072ba | 39 | * {@inheritdoc} |
| TMBOY | 44:c1d8923072ba | 40 | */ |
| TMBOY | 44:c1d8923072ba | 41 | public function current() |
| TMBOY | 44:c1d8923072ba | 42 | { |
| TMBOY | 44:c1d8923072ba | 43 | $this->initialize(); |
| TMBOY | 44:c1d8923072ba | 44 | |
| TMBOY | 44:c1d8923072ba | 45 | return $this->data[$this->position]; |
| TMBOY | 44:c1d8923072ba | 46 | } |
| TMBOY | 44:c1d8923072ba | 47 | |
| TMBOY | 44:c1d8923072ba | 48 | /** |
| TMBOY | 44:c1d8923072ba | 49 | * {@inheritdoc} |
| TMBOY | 44:c1d8923072ba | 50 | */ |
| TMBOY | 44:c1d8923072ba | 51 | public function next() |
| TMBOY | 44:c1d8923072ba | 52 | { |
| TMBOY | 44:c1d8923072ba | 53 | $this->initialize(); |
| TMBOY | 44:c1d8923072ba | 54 | $this->position++; |
| TMBOY | 44:c1d8923072ba | 55 | } |
| TMBOY | 44:c1d8923072ba | 56 | |
| TMBOY | 44:c1d8923072ba | 57 | /** |
| TMBOY | 44:c1d8923072ba | 58 | * {@inheritdoc} |
| TMBOY | 44:c1d8923072ba | 59 | */ |
| TMBOY | 44:c1d8923072ba | 60 | public function key() |
| TMBOY | 44:c1d8923072ba | 61 | { |
| TMBOY | 44:c1d8923072ba | 62 | $this->initialize(); |
| TMBOY | 44:c1d8923072ba | 63 | |
| TMBOY | 44:c1d8923072ba | 64 | return $this->position; |
| TMBOY | 44:c1d8923072ba | 65 | } |
| TMBOY | 44:c1d8923072ba | 66 | |
| TMBOY | 44:c1d8923072ba | 67 | /** |
| TMBOY | 44:c1d8923072ba | 68 | * {@inheritdoc} |
| TMBOY | 44:c1d8923072ba | 69 | */ |
| TMBOY | 44:c1d8923072ba | 70 | public function valid() |
| TMBOY | 44:c1d8923072ba | 71 | { |
| TMBOY | 44:c1d8923072ba | 72 | $this->initialize(); |
| TMBOY | 44:c1d8923072ba | 73 | |
| TMBOY | 44:c1d8923072ba | 74 | return isset($this->data[$this->position]); |
| TMBOY | 44:c1d8923072ba | 75 | } |
| TMBOY | 44:c1d8923072ba | 76 | |
| TMBOY | 44:c1d8923072ba | 77 | /** |
| TMBOY | 44:c1d8923072ba | 78 | * {@inheritdoc} |
| TMBOY | 44:c1d8923072ba | 79 | */ |
| TMBOY | 44:c1d8923072ba | 80 | public function rewind() |
| TMBOY | 44:c1d8923072ba | 81 | { |
| TMBOY | 44:c1d8923072ba | 82 | $this->initialize(); |
| TMBOY | 44:c1d8923072ba | 83 | $this->position = 0; |
| TMBOY | 44:c1d8923072ba | 84 | } |
| TMBOY | 44:c1d8923072ba | 85 | |
| TMBOY | 44:c1d8923072ba | 86 | /** |
| TMBOY | 44:c1d8923072ba | 87 | * {@inheritdoc} |
| TMBOY | 44:c1d8923072ba | 88 | */ |
| TMBOY | 44:c1d8923072ba | 89 | public function count() |
| TMBOY | 44:c1d8923072ba | 90 | { |
| TMBOY | 44:c1d8923072ba | 91 | $this->initialize(); |
| TMBOY | 44:c1d8923072ba | 92 | |
| TMBOY | 44:c1d8923072ba | 93 | return count($this->data); |
| TMBOY | 44:c1d8923072ba | 94 | } |
| TMBOY | 44:c1d8923072ba | 95 | |
| TMBOY | 44:c1d8923072ba | 96 | /** |
| TMBOY | 44:c1d8923072ba | 97 | * Initializer |
| TMBOY | 44:c1d8923072ba | 98 | */ |
| TMBOY | 44:c1d8923072ba | 99 | private function initialize() |
| TMBOY | 44:c1d8923072ba | 100 | { |
| TMBOY | 44:c1d8923072ba | 101 | if (!$this->initialized) { |
| TMBOY | 44:c1d8923072ba | 102 | $this->data = $this->buildDataFromObject($this->object); |
| TMBOY | 44:c1d8923072ba | 103 | $this->initialized = true; |
| TMBOY | 44:c1d8923072ba | 104 | } |
| TMBOY | 44:c1d8923072ba | 105 | } |
| TMBOY | 44:c1d8923072ba | 106 | |
| TMBOY | 44:c1d8923072ba | 107 | /** |
| TMBOY | 44:c1d8923072ba | 108 | * @param object $object |
| TMBOY | 44:c1d8923072ba | 109 | * @return array |
| TMBOY | 44:c1d8923072ba | 110 | */ |
| TMBOY | 44:c1d8923072ba | 111 | private function buildDataFromObject($object) |
| TMBOY | 44:c1d8923072ba | 112 | { |
| TMBOY | 44:c1d8923072ba | 113 | $result = array(); |
| TMBOY | 44:c1d8923072ba | 114 | |
| TMBOY | 44:c1d8923072ba | 115 | $stack = new \SplStack(); |
| TMBOY | 44:c1d8923072ba | 116 | $stack->push($object); |
| TMBOY | 44:c1d8923072ba | 117 | |
| TMBOY | 44:c1d8923072ba | 118 | while (!$stack->isEmpty()) { |
| TMBOY | 44:c1d8923072ba | 119 | |
| TMBOY | 44:c1d8923072ba | 120 | $current = $stack->pop(); |
| TMBOY | 44:c1d8923072ba | 121 | if (is_object($current)) { |
| TMBOY | 44:c1d8923072ba | 122 | array_push($result, $current); |
| TMBOY | 44:c1d8923072ba | 123 | } |
| TMBOY | 44:c1d8923072ba | 124 | |
| TMBOY | 44:c1d8923072ba | 125 | foreach ($this->getDataFromItem($current) as $propertyName => $propertyValue) { |
| TMBOY | 44:c1d8923072ba | 126 | if (is_object($propertyValue) || is_array($propertyValue)) { |
| TMBOY | 44:c1d8923072ba | 127 | $stack->push($propertyValue); |
| TMBOY | 44:c1d8923072ba | 128 | } |
| TMBOY | 44:c1d8923072ba | 129 | } |
| TMBOY | 44:c1d8923072ba | 130 | } |
| TMBOY | 44:c1d8923072ba | 131 | |
| TMBOY | 44:c1d8923072ba | 132 | return $result; |
| TMBOY | 44:c1d8923072ba | 133 | } |
| TMBOY | 44:c1d8923072ba | 134 | |
| TMBOY | 44:c1d8923072ba | 135 | /** |
| TMBOY | 44:c1d8923072ba | 136 | * @param object|array $item |
| TMBOY | 44:c1d8923072ba | 137 | * @return array |
| TMBOY | 44:c1d8923072ba | 138 | */ |
| TMBOY | 44:c1d8923072ba | 139 | private function getDataFromItem($item) |
| TMBOY | 44:c1d8923072ba | 140 | { |
| TMBOY | 44:c1d8923072ba | 141 | if (!is_object($item) && !is_array($item)) { |
| TMBOY | 44:c1d8923072ba | 142 | return array(); |
| TMBOY | 44:c1d8923072ba | 143 | } |
| TMBOY | 44:c1d8923072ba | 144 | |
| TMBOY | 44:c1d8923072ba | 145 | return is_object($item) ? get_object_vars($item) : $item; |
| TMBOY | 44:c1d8923072ba | 146 | } |
| TMBOY | 44:c1d8923072ba | 147 | } |
