<?php
<?php
/* Raciow Framework Project
* The MIT License(http://opensource.org/licenses/MIT)
* Copyright 2014 Mararok(Andrzej Wasiak, mararok@gmail.com)
*/
namespace raciow\util;
class ClassPrivateAccessor {
/** @var \Closure */
private static $getter;
/** @var \Closure */
private static $setter;
private static $setterMany;
/** @var \Closure */
private $contexGetter;
/** @var \Closure */
private $contexSetter;
private $contextSetterMany;
public static function initAccessor() {
ClassPrivateAccessor::$getter = function($fieldName) {
return $this->$fieldName;
};
ClassPrivateAccessor::$setter = function($fieldName, $newValue) {
$this->$fieldName = $newValue;
};
ClassPrivateAccessor::$setterMany = function(array $values) {
foreach ($values as $field => $value) {
$this->$field = $value;
}
};
}
public function setContextForGetter($context) {
$this->contexGetter = ClassPrivateAccessor::$getter->bindTo($context, $context);
}
public function setContextForSetter($context) {
$this->contexSetter = ClassPrivateAccessor::$setter->bindTo($context, $context);
}
public function setContextForSetterMany($context) {
$this->contextSetterMany = ClassPrivateAccessor::$setterMany->bindTo($context, $context);
}
public function get($fieldName) {
return $this->contexGetter($fieldName);
}
public function set($fieldName, $newValue) {
$this->contexSetter($fieldName, $newValue);
}
public function setMany($values) {
$this->contextSetterMany($values);
}
}
ClassPrivateAccessor::initAccessor();
$accessor = new ClassPrivateAccessor();
class Foo {
private $test1;
private $test2;
private $test3;
}
$foo = new Foo();
$accessor->setSetterContext($foo);
$acessor->set('test1',10);
- Output for 4.4.2 - 4.4.9, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.28, 5.4.0 - 5.4.31
- Parse error: syntax error, unexpected '<' in /in/O7IHY on line 2
Process exited with code 255. - Output for 4.3.0 - 4.3.1, 4.3.5 - 4.3.11, 4.4.0 - 4.4.1, 5.0.0 - 5.0.5
- Parse error: parse error, unexpected '<' in /in/O7IHY on line 2
Process exited with code 255. - Output for 4.3.2 - 4.3.4
- Parse error: parse error in /in/O7IHY on line 2
Process exited with code 255.
preferences:
200.9 ms | 1399 KiB | 121 Q