Nikita Popov wrote on 24.01.2019 15:40:

> On Thu, Jan 24, 2019 at 3:08 PM Larry Garfield <la...@garfieldtech.com>
> wrote:
> 
>> On Thu, Jan 24, 2019, at 8:02 AM, Nicolas Grekas wrote:
>> > Thank you Nikita,
>> >
>> > the RFC looks solid to me. Using magic methods makes perfect sense to
>> allow
>> > a smooth migration path.
>> >
>> > We could enforce that if one of __serialize() or __unserialize() is
>> > > defined, both have to be defined, to avoid running into such cases.
>> >
>> >
>> > That would make sense a lot of sense to me.
>> >
>> >
>> > > Maybe one could use `__normalize()` and `__denormalize()` [...]
>> > >
>> > I'd like that "serialization" appears in some form in the name
>> > >
>> >
>> > An idea: __pre_serialize / __post_unserialize
>> > But __serialize/__unserialize are good to me.
>> >
>> > Nicolas
>>
>> Given that these methods would not be producing/consuming strings but a
>> de-classed representation of the object, I agree that it's closer to
>> "normalize" as Symfony uses the term.  We don't have to use that name
>> specifically but something other than serialize/deserialize seems logical.
>>
>> Also, that in turn suggests that the same mechanism could be leveraged for
>> formats other than the C (or 0?  It's referred to both ways in the RFC)
>> format we all know and grudgingly accept.  Eg, it feels an awful lot like
>> JsonSerializable (which is for serialize only, but also returns an array),
>> and I can definitely see uses for a standard intermediary format that could
>> be encoded to C-serialized, JSON, or XML, or whatever else.  Is there some
>> way that we could allow other systems to hook into it cleanly, such that it
>> becomes a common intermediary format for a variety of stringified formats?
>>
> 
> Thanks for bringing this up. We do have a bit of a proliferation of
> different serialization-related (in the wider sense of the word) methods:
> 
> * __sleep() and __wakeup()
> * Serializable
> * JsonSerializable
> * __set_state()
> 
> It would be nice if we could make this reusable beyond serialization. There
> are two caveats that come to mind:
> 
> * While __serialize() just returns an array, the same as JsonSerializable,
> this does not necessarily mean that they can be combined. PHP's
> serialization mechanism is much more powerful in what is can represent, so
> the return values of __serialize() and JsonSerializable::jsonSerialize()
> might well want to be different. The latter should in particular probably
> not include any non-trivial objects.
> * The __unserialize() method assumes an already constructed object on
> which __unserialize() can be called, which we need due to the peculiar
> limitations of serialization in PHP, but which is probably not very
> convenient for other purposes, where the approach of __set_state() is more
> useful.
> 
> Nikita
> 

Thanks for the rfc and all your contributions!

> * __sleep() and __wakeup()
> * Serializable
> * JsonSerializable
> * __set_state()

To me it's not clear why we need all these methods, for example:

$a = new A();
$aSerialized = serialize($a->toArray());
$aRestored = A::createFromArray(unserialize($aSerialized));

Apart from security problems, problems with versioning and unreadable data in 
databases,
I don't see many benefits from using serialize()/unserialize().

Regards
Thomas

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to