wddx_serialize_vars()
(PHP 4, PHP 5, PHP 7)
Serialize variables into a WDDX packet
WarningThis function wasREMOVEDin PHP 7.4.0.
说明
wddx_serialize_vars(mixed $var_name[,mixed$...
]): string
Creates a WDDX packet with a structure that contains the serialized representation of the passed variables.
参数
This function takes a variable number of parameters.
- $var_name
Can be either a string naming a variable or an array containing strings naming the variables or another array, etc.
- ...
返回值
Returns the WDDX packet, or FALSE
on error.
范例
Example #1 wddx_serialize_vars() example
<?php $a = 1; $b = 5.5; $c = array("blue", "orange", "violet"); $d = "colors"; $clvars = array("c", "d"); echo wddx_serialize_vars("a", "b", $clvars); ?>
以上例程会输出:
<wddxPacket version='1.0'><header/><data><struct><var name='a'><number>1</number></var> <var name='b'><number>5.5</number></var><var name='c'><array length='3'> <string>blue</string><string>orange</string><string>violet</string></array></var> <var name='d'><string>colors</string></var></struct></data></wddxPacket>
A function to use for dates with PHP & WDDX getdate() $ta="<FORM><TEXTAREA rows=15 cols=80>" ; $te="</TEXTAREA></FORM>"; $packet_id=wddx_packet_start("Date Example--"); $myDate=getdate(); wddx_add_vars($packet_id,'myDate'); $package=wddx_packet_end($packet_id); print($ta.$package.$te); Produces: <wddxPacket version='1.0'><header><comment>Date Example--</comment></header> <data><struct><var name='myDate'> <struct><var name='seconds'><number>12</number></var> <var name='minutes'><number>55</number></var> <var name='hours'><number>1</number></var> <var name='mday'><number>13</number></var> <var name='wday'><number>1</number></var> <var name='mon'><number>10</number></var> <var name='year'><number>2003</number></var> <var name='yday'><number>285</number></var> <var name='weekday'><string>Monday</string></var> <var name='month'><string>October</string></var> <var name='0'><number>1066031712</number> </var></struct></var></struct></data></wddxPacket>
The above feature will cause a slight trouble since the name of the variable will always be "wddxtemp" but you can use preg_replace to fix that. Also, a better approach is to serialize the entire class. WDDX will that write a reserved "php_class_name" variable which can be used to reconstruct the class during a deserialize.
You can use globals to get around the above in classes: <?php class Test { var $str; var $wddx; function Test() { $this->str = "test"; $this->wddx_serialize($this->str); header('Content-Type: text/xml'); echo ($this->wddx); } function wddx_serialize($var) { global $wddxtemp; unset($wddxtemp); $wddxtemp = $var; $this->wddx = wddx_serialize_vars("wddxtemp"); } } new Test(); ?> -terry
You can use globals to get around the above in classes: <?php class Test { var $str; var $wddx; function Test() { $this->str = "test"; $this->wddx_serialize($this->str); header('Content-Type: text/xml'); echo ($this->wddx); } function wddx_serialize($var) { global $wddxtemp; unset($wddxtemp); $wddxtemp = $var; $this->wddx = wddx_serialize_vars("wddxtemp"); } } new Test(); ?> -terry
Be careful using WDDX - functions on object variables. As I just had to find out the following won't work: <?php class Test { var $str; var $wddx; function Test() { $this->str = "test"; $this->wddx = wddx_serialize_vars("this->str"); print(htmlentities($this->wddx)); } } new Test(); ?> That's what you'll get: <wddxPacket version='1.0'><header/><data><struct></struct></data></wddxPacket>