Hoa central
AClass.php
Go to the documentation of this file.
1 <?php
2 
38 
39 use Hoa\Cache;
40 
49 class AClass extends Frontend
50 {
56  protected $_object = null;
57 
63  protected $_arguments = [];
64 
65 
66 
73  public function __construct()
74  {
75  $arguments = func_get_args();
76 
77  if (null === $this->_object) {
78  if (isset($arguments[1])) {
79  return parent::__construct($arguments[0], $arguments[1]);
80  } else {
81  return parent::__construct($arguments[0]);
82  }
83  }
84 
85  return $this->__call('__construct', $arguments);
86  }
87 
98  public function __call($method, Array $arguments)
99  {
100  $gc =
101  is_string($this->_object)
102  ? $this->_object
103  : get_class($this->_object);
104 
105  if (!method_exists($this->_object, $method)) {
106  throw new Cache\Exception(
107  'Method %s of %s object does not exists.',
108  0,
109  [$method, $gc]
110  );
111  }
112 
113  $this->_arguments = $this->ksort($arguments);
114  $idExtra = serialize($this->_arguments);
115  $this->makeId($gc . '::' . $method . '/' . $idExtra);
116  $content = $this->_backend->load();
117 
118  if (false !== $content) {
119  echo $content[0]; // output
120 
121  return $content[1]; // return
122  }
123 
124  ob_start();
125  ob_implicit_flush(false);
126 
127  if (is_string($this->_object) && $method == '__construct') {
128  $reflection = new \ReflectionClass($this->_object);
129 
130  if (!$reflection->isInstantiable()) {
131  throw new Cache\Exception(
132  'Class %s is not instanciable.',
133  1,
134  $this->_object
135  );
136  }
137 
138  $this->_object = $reflection->newInstanceArgs($arguments);
139  $return = $this->_object;
140  } else {
141  $return = call_user_func_array(
142  [$this->_object, $method],
143  $arguments
144  );
145  }
146 
147  $output = ob_get_contents();
148  ob_end_clean();
149 
150  $this->_backend->store([$output, $return]);
151  $this->removeId();
152 
153  echo $output;
154 
155  return $return;
156  }
157 
165  public function setCacheObject($object = null)
166  {
167  if (is_string($object) || is_object($object)) {
168  $this->_object = $object;
169 
170  return $this;
171  }
172 
173  throw new Cache\Exception(
174  '%s could be a string or a object.',
175  2,
176  $object
177  );
178  }
179 }
__call($method, Array $arguments)
Definition: AClass.php:98
setCacheObject($object=null)
Definition: AClass.php:165
ksort(Array &$array)
Definition: Cache.php:258
$content
Definition: Hoa.php:119
makeId($id=null)
Definition: Cache.php:162