Слияние кода завершено, страница обновится автоматически
<?php
/**
* Created by zhouzhongyuan.
* User: zhou
* Date: 2015/11/27
* Time: 11:43
*/
namespace shiwolang\db;
class JsonObjectContainer implements \JsonSerializable, ObjectContainerInterface
{
protected $className = null;
protected $object = null;
protected $reflectionClass = null;
protected $data = [];
public function __construct($className = null, $constructArgs = [])
{
$this->className = $className;
if ($className !== null) {
$this->reflectionClass = new \ReflectionClass($className);
$this->object = $this->reflectionClass->newInstanceArgs($constructArgs);
foreach ($this->data as $name => $value) {
$this->object->$name = $value;
}
}
}
function __set($name, $value)
{
$this->data[$name] = $value;
}
/**
* Specify data which should be serialized to JSON
* @link http://php.net/manual/en/jsonserializable.jsonserialize.php
* @return mixed data which can be serialized by <b>json_encode</b>,
* which is a value of any type other than a resource.
* @since 5.4.0
*/
function jsonSerialize()
{
$data = [];
$methods = $this->reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC);
foreach ($methods as $key => $method) {
if (strpos($method->getDocComment(), "@json") !== false) {
$name = $method->getName();
$jsonKeyName = lcfirst(strpos($name, "get") == 0 ? substr($name, 3) : $name);
$data[$jsonKeyName] = $method->invoke($this->object);
}
}
$data = count($data) == 0 ? $this->data : $data;
return $data;
}
/**
* @return null|object
*/
public function getObject()
{
return $this->object;
}
public function setObject($value)
{
$this->object = $value;
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )