1<?php declare(strict_types=1);
2
3// Observer objects for the Zend/tests/list_keyed_evaluation_order.* tests
4
5class Stringable
6{
7    private $name;
8    public function __construct(string $name) {
9        $this->name = $name;
10    }
11
12    public function __toString(): string {
13        echo "$this->name evaluated.", PHP_EOL;
14        return $this->name;
15    }
16}
17
18class Indexable implements ArrayAccess
19{
20    private $array;
21    public function __construct(array $array) {
22        $this->array = $array;
23    }
24
25    public function offsetExists($offset): bool {
26        echo "Existence of offset $offset checked for.", PHP_EOL;
27        return isset($this->array[$offset]);
28    }
29
30    public function offsetUnset($offset): void {
31        unset($this->array[$offset]);
32        echo "Offset $offset removed.", PHP_EOL;
33    }
34
35    public function offsetGet($offset) {
36        echo "Offset $offset retrieved.", PHP_EOL;
37        return $this->array[$offset];
38    }
39
40    public function offsetSet($offset, $value): void {
41        $this->array[$offset] = $value;
42        echo "Offset $offset set to $value.", PHP_EOL;
43    }
44}
45
46class IndexableRetrievable
47{
48    private $label;
49    private $indexable;
50
51    public function __construct(string $label, Indexable $indexable) {
52        $this->label = $label;
53        $this->indexable = $indexable;
54    }
55
56    public function getIndexable(): Indexable {
57        echo "Indexable $this->label retrieved.", PHP_EOL;
58        return $this->indexable;
59    }
60}
61