매직 메서드 __Set 및 __get을 사용해야합니다. 간단한 예 :
class Foo
{
private $content = array();
public function __set($key, $value)
{
$this->content[$key] = $value;
return $this;
}
public function __get($value)
{
return $this->$content[$value];
}
}
물론이 예제를 다음과 같이 사용하지 마십시오. 보안이 전혀 없습니다. :)
편집 : 귀하의 의견을 보았고 여기에 반사 및 장식자를 기반으로 한 대안이 될 수 있습니다.
class Foo
{
private $content = array();
private $stdInstance;
public function __construct($stdInstance)
{
$this->stdInstance = $stdInstance;
}
public function __set($key, $value)
{
$ref = new ReflectionClass($this->stdInstance);
$props = $ref->getProperties();
if (in_array($key, $props)) {
$this->stdInstance->$key = $value;
} else {
$this->content[$key] = $value;
}
return $this;
}
public function __get($value)
{
if (array_key_exists($value, $this->content))
{
return $this->content[$value];
} else {
$ref = new ReflectionClass($this->stdInstance);
$props = $ref->getProperties();
if (in_array($value, $props)) {
return $this->stdInstance->$value;
} else {
throw new \Exception('No prop in here...');
}
}
}
}
추신 : 나는 내 코드를 테스트하지 않았고 일반적인 아이디어 만 ...
TRUE
에 두번째 매개 변수로json_decode
. 객체 배열 대신 연관 배열을 제공합니다.