У меня есть следующий кусок кода.
class SomeClass
{
public static $one = 1;
private static $two = 2;
public $three = 3;
private $four = 4;
}
header("Content-Type: application/json");
echo json_encode(new SomeClass());
Чего я хочу добиться, так это закодировать свойство и член открытого класса как объект JSON. Моя проблема в том что json_encode()
игнорируемых public static $one = 1;
и результат будет:
{
"three": 3
}
Хотя я ожидаю, что он также напечатает открытый статический член, такой как:
{
"one": 1,
"three": 3
}
Можно ли кодировать JSON со статическими членами в PHP?
В соответствии с Руководство по PHP:
Статические свойства не могут быть доступны через объект с помощью оператора стрелки ->.
Это означает нет
Тем не менее, я придумал решение, использующее Размышления:
class SomeClass
{
public static $one = 1;
private static $two = 2;
public $three = 3;
private $four = 4;
}
$reflection = new ReflectionClass('SomeClass');
$instance = $reflection->newInstance();
$properties = $reflection->getProperties(ReflectionProperty::IS_PUBLIC);
$jsonArray = array();
foreach($properties as $property) {
$jsonArray[$property->getName()] = $property->getValue($instance);
}
echo json_encode($jsonArray);
Результат
{"one":1,"three":3}
В нативной реализации: НЕТ.
Если вы используете Php v> = 5.4.0, вы можете использовать JsonSerializable
Вот пример:
class myClass implements JsonSerializable
{
private $_name = 'test_name';
public $email = '[email protected]';
public static $staticVar = 5;
public function jsonSerialize()
{
return get_class_vars(get_class($this));
}
}
echo json_encode(new myClass());