Кодирование статического члена класса как JSON в переполнении стека

У меня есть следующий кусок кода.

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?

0

Решение

В соответствии с Руководство по 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}
0

Другие решения

В нативной реализации: НЕТ.

Если вы используете 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());
1

По вопросам рекламы [email protected]