1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10: 11:
12:
13:
14:
15: 16: 17: 18: 19: 20:
21: abstract class DibiLazyStorageBase
22: {
23: private $callback;
24:
25:
26: public function __construct($callback)
27: {
28: $this->setCallback($callback);
29: }
30:
31:
32:
33: public function setCallback($callback)
34: {
35: if (!is_callable($callback)) {
36: $able = is_callable($callback, TRUE, $textual);
37: throw new InvalidArgumentException("Handler '$textual' is not " . ($able ? 'callable.' : 'valid PHP callback.'));
38: }
39: $this->callback = $callback;
40: }
41:
42:
43:
44: public function getCallback()
45: {
46: return $this->callback;
47: }
48:
49: }
50:
51:
52:
53: final class DibiLazyStorage extends DibiLazyStorageBase
54: {
55:
56: public function __set($nm, $val)
57: {
58: if ($nm == '') {
59: $nm = "\xFF";
60: }
61: $this->$nm = $val;
62: }
63:
64:
65:
66: public function __get($nm)
67: {
68: if ($nm == '') {
69: $nm = "\xFF";
70: return isset($this->$nm) ? $this->$nm : $this->$nm = call_user_func($this->getCallback(), '');
71: } else {
72: return $this->$nm = call_user_func($this->getCallback(), $nm);
73: }
74: }
75:
76: }
77:
78: