| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | <?php/** * IXR_Value * * @package IXR * @since 1.5.0 */class IXR_Value {    var $data;    var $type;	/**	 * PHP5 constructor.	 */	function __construct( $data, $type = false )    {        $this->data = $data;        if (!$type) {            $type = $this->calculateType();        }        $this->type = $type;        if ($type == 'struct') {            // Turn all the values in the array in to new IXR_Value objects            foreach ($this->data as $key => $value) {                $this->data[$key] = new IXR_Value($value);            }        }        if ($type == 'array') {            for ($i = 0, $j = count($this->data); $i < $j; $i++) {                $this->data[$i] = new IXR_Value($this->data[$i]);            }        }    }	/**	 * PHP4 constructor.	 */	public function IXR_Value( $data, $type = false ) {		self::__construct( $data, $type );	}    function calculateType()    {        if ($this->data === true || $this->data === false) {            return 'boolean';        }        if (is_integer($this->data)) {            return 'int';        }        if (is_double($this->data)) {            return 'double';        }        // Deal with IXR object types base64 and date        if (is_object($this->data) && is_a($this->data, 'IXR_Date')) {            return 'date';        }        if (is_object($this->data) && is_a($this->data, 'IXR_Base64')) {            return 'base64';        }        // If it is a normal PHP object convert it in to a struct        if (is_object($this->data)) {            $this->data = get_object_vars($this->data);            return 'struct';        }        if (!is_array($this->data)) {            return 'string';        }        // We have an array - is it an array or a struct?        if ($this->isStruct($this->data)) {            return 'struct';        } else {            return 'array';        }    }    function getXml()    {        // Return XML for this value        switch ($this->type) {            case 'boolean':                return '<boolean>'.(($this->data) ? '1' : '0').'</boolean>';                break;            case 'int':                return '<int>'.$this->data.'</int>';                break;            case 'double':                return '<double>'.$this->data.'</double>';                break;            case 'string':                return '<string>'.htmlspecialchars($this->data).'</string>';                break;            case 'array':                $return = '<array><data>'."\n";                foreach ($this->data as $item) {                    $return .= '  <value>'.$item->getXml()."</value>\n";                }                $return .= '</data></array>';                return $return;                break;            case 'struct':                $return = '<struct>'."\n";                foreach ($this->data as $name => $value) {					$name = htmlspecialchars($name);                    $return .= "  <member><name>$name</name><value>";                    $return .= $value->getXml()."</value></member>\n";                }                $return .= '</struct>';                return $return;                break;            case 'date':            case 'base64':                return $this->data->getXml();                break;        }        return false;    }    /**     * Checks whether or not the supplied array is a struct or not     *     * @param array $array     * @return bool     */    function isStruct($array)    {        $expected = 0;        foreach ($array as $key => $value) {            if ((string)$key !== (string)$expected) {                return true;            }            $expected++;        }        return false;    }}
 |