Poszukuję klasy który będzie mi w stanie wysłać podane zmienne obiektowe jako łańcuch JSON.

edit>
Gupek ze mnie zapomniałem dodać że chodzi mi o dodawanie zmiennych prywatnych do wyniku.
Dodatkowo korzystam z trochę udziwnionej notacji ( podkreślenia przed typami prymitywnymi PHP w celu odróżnienia ich od obiektów )
Już napisałem sobie trochę prostego kodu.

  1. <?php
  2. class Ajax
  3. {
  4.    static public function send($data)
  5.    {
  6.        $out = json_encode($data);
  7.        if(defined('JSON_ERROR_NONE') && JSON_ERROR_NONE !== json_last_error)
  8.        {
  9.            AjaxError::send('Nie udało się dokonać konwersji JSON', 0);
  10.        } else {
  11.            echo $out;
  12.        }
  13.    }
  14.    static public function sendObject($data)
  15.    {
  16.        Ajax::send(Ajax::preparate($data));
  17.    }
  18.    static public function preparate($data)
  19.    {
  20.        $ref = new ReflectionObject($data);
  21.        foreach($ref->getProperties() as $prop)
  22.        {
  23.            $prop = $prop->getName();
  24.            if($prop{0} == '_')
  25.            {
  26.                $prop = substr($prop, 1);
  27.            }
  28.            $method = 'get'.ucfirst($prop);
  29.            if($ref->hasMethod($method))
  30.            {
  31.                $output = $data->$method();
  32.                $value[$prop] = is_object($output) ? Ajax::preparate($output) : $output;
  33.            } else
  34.            {
  35.                $value[$prop] = null;
  36.            }
  37.        }
  38.        return $value;
  39.    }
  40. }
  41.  
  42. class AjaxError
  43. {
  44.    private $_code;
  45.    private $_message;
  46.  
  47.    public function  __construct($message, $code)
  48.    {
  49.        $this->_code = $code;
  50.        $this->_message = $message;
  51.    }
  52.    public function getCode()
  53.    {
  54.        return $this->_code;
  55.    }
  56.    public function getMessage()
  57.    {
  58.        return $this->_message;
  59.    }
  60.    static public function send($message, $code)
  61.    {
  62.        Ajax::sendObject(new AjaxError($message, $code));
  63.    }
  64. }
  65. ?>

Teraz tylko scalić z obsługą wyjątków i gitara gra. smile.gif