Habari\XMLRPCUtils::encode_arg PHP Method

encode_arg() public static method

Encode a variable value into the parameters of the XML tree
public static encode_arg ( SimpleXMLElement $params, mixed $arg )
$params SimpleXMLElement The parameter to add the value elements to.
$arg mixed The value to encode
    public static function encode_arg($params, $arg)
    {
        switch (true) {
            case is_array($arg):
                $data = $params->addchild('value')->addchild('array')->addchild('data');
                foreach ($arg as $element) {
                    self::encode_arg($data, $element);
                }
                break;
            case $arg instanceof XMLRPCDate:
                $params->addchild('value')->addchild('dateTime.iso8601', date('c', $arg->date));
                break;
            case $arg instanceof XMLRPCBinary:
                $params->addchild('value')->addchild('base64', base64_encode($arg->data));
                break;
            case $arg instanceof XMLRPCStruct:
                $struct = $params->addchild('value')->addchild('struct');
                $object_vars = $arg->get_fields();
                foreach ($object_vars as $field) {
                    $member = $struct->addchild('member');
                    $member->addchild('name', $field);
                    self::encode_arg($member, $arg->{$field});
                }
                break;
            case is_object($arg):
                $struct = $params->addchild('value')->addchild('struct');
                $object_vars = get_object_vars($arg);
                foreach ($object_vars as $key => $value) {
                    $member = $struct->addchild('member');
                    $member->addchild('name', $key);
                    self::encode_arg($member, $value);
                }
                break;
            case is_integer($arg):
                $params->addchild('value')->addchild('i4', $arg);
                break;
            case is_bool($arg):
                $params->addchild('value')->addchild('boolean', $arg ? '1' : '0');
                break;
            case is_string($arg):
                $params->addchild('value')->addchild('string', $arg);
                break;
            case is_float($arg):
                $params->addchild('value')->addchild('double', $arg);
                break;
        }
    }