Can you explain the next interesting behaviour?
class test {
//Class *test* has two properties, public and private.
public $xpublic = \'x1\';
private $
The array key contains a marker that this should be a private property of the class test.
Compare your scripts output with the following:
$array = array(
"xpublic" => "x1",
# this will become a private member:
"\x00test\x00xprivate" => "x2",
# this will become a protected member:
"\x00*\x00xprotected" => "x3"
);
var_dump($array);
$obj = (object) $array;
var_dump($obj);
When serialized, the same string is used to describe the private members.
Output:
array(3) {
["xpublic"]=>
string(2) "x1"
["testxprivate"]=>
string(2) "x2"
["*xprotected"]=>
string(2) "x3"
}
object(stdClass)#1 (3) {
["xpublic"]=>
string(2) "x1"
["xprivate":"test":private]=>
string(2) "x2"
["xprotected":protected]=>
string(2) "x3"
}
In the output of var_dump(), the null bytes are not visible.
(Update: Added protected class member)