On Thu, Sep 5, 2024, at 10:55, Alexandru Pătrănescu wrote:
> 
> On Tue, Sep 3, 2024 at 2:27 PM Philip Hofstetter <phofstet...@sensational.ch> 
> wrote:
>> Hello,
>> 
>> As per my previous email to the list, I have now created the official RFC to 
>> deprecate calling json_serialize() on instances of classes marked with 
>> ZEND_ACC_NOT_SERIALIZABLE.
>> 
>> https://wiki.php.net/rfc/deprecate-json_encode-nonserializable
>> 
>> 
> 
> Sharing my experience, I never use json_encode on objects but on arrays (that 
> are both JSON objects or JSON arrays).
> When I see an object implementing JsonSerializable, I think it is the wrong 
> approach, and I am usually able to find a better way.
> Maybe if we could go back in time, we would not allow json_encode on an 
> object, except if it implemented JsonSerializable, but that ship sailed long 
> ago.
> 
> To your proposal, I think the BC break would be pretty big and I don't see a 
> way it would pass.
> On https://www.php.net/json_encode we can read:
> > If a value to be serialized is an object, then by default only publicly 
> > visible properties will be included.
> So that's the expected behaviour.
> 
> Yes, you can say that encoding as JSON is just "another serialization 
> method", but the default method in PHP, using json_encode()/json_decode(), is 
> not symmetrical when using objects.
> And here lies the difference with serialize()/unserialize(), as this one aims 
> to be symmetrical, and where it can't be, it has a way to stop the 
> serialization.
> 
> I am happy with the current way it works, getting an empty JSON object if 
> there are no public properties for a Generator or Closure.
> And I don't think having an error for them would improve the language in a 
> meaningful way, and the BC break is not worth it.
> 
> Regards,
> Alex
> 

To add to this, we apparently use json_encode at work to serialize custom 
exceptions, which appears to work. This RFC would break that, I think. 

— Rob

Reply via email to