On Tue Nov 30 03:26 AM, Julien Pauli wrote:
> I guess serialize mechanism cant use any char that can be part of a
> PHP variable. And "_" can. As property names respect binary
> compatibility, the only char that can be used to mark private
> properties is actually the NULL byte. Ping me if I'm wrong.
>
Right, what I was proposing didn't make sense. After digging through the
source, say we have:
class Foo {
public $a = 1;
protected $b = 2;
private $c = 3;
}
Currently this is:
O:3:"Foo":3:{s:1:"a";i:1;s:4:"�*�b";i:2;s:6:"�Foo�c";i:3;}
An alternative could be:
O:3:"Foo":3:{s:1:"a";i:1;*;s:4:"b";i:2;_;s:6:"c";i:3;}
Where "*;" is a marker for protected, "_;" is a marker for private
It would involve some trickery in ext/standard/var_unserializer.re :
"*;" {
/* prepend �*� to the next key so that we have zend_symtable_find("�*�b")
*/
}
"_;" {
/* prepend �Foo� to the next key so that we have
zend_symtable_find("�Foo�c") */
}
Just a thought if someone wants to refactor it / look into performance, I
believe that approach would support both:
O:3:"Foo":3:{s:1:"a";i:1;*;s:4:"b";i:2;_;s:6:"c";i:3;}
O:3:"Foo":3:{s:1:"a";i:1;s:4:"�*�b";i:2;s:6:"�Foo�c";i:3;}
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php