Proposal: ArraySerializable interface

From: Date: Wed, 11 Dec 2013 01:23:32 +0000
Subject: Proposal: ArraySerializable interface
Groups: php.internals 
Request: Send a blank email to internals+get-70579@lists.php.net to get a copy of this message
Hi, I've got an idea for adding common way to convert array from object: ArraySerializable interface and to allow the changing of existing array conversion mechanism. As an example of this change, consider the following code-snippet: $person = new StdClass(); $person->name = "John"; $phone = new StdClass(); $phone->number = "12345"; $person->phone = $phone; var_dump((array)$person); #array(2) { # ["name"]=> # string(4) "John" # ["phone"]=> # object(stdClass)#2 (1) { # ["number"]=> # string(5) "12345" # } #} Currently, the implicit object to array conversion does not work recursively. This propose changes object to array conversion behaviour which implements ArraySerializable interface. specifically ArraySerializable::__toArray method overrides current (array) cast. interface ArraySerializable { /** @return array */ public function __toArray(); } ArraySerializable interface provides common way to convert to array from object. also impose conversion rule. * __toArray() returning value excepts an array and It values only accepts primitive type. (long, double, string and array) * do cast to array operation when the value contains object which implements ArraySerializable interface * otherwise, raise RuntimeException. * __toArray() method calls implicitly when cast to array from object. This feature improves object to portable format (like json) conversion mechanism. rough propose document and patch are here: https://gist.github.com/chobie/7890899 I want to get feedback about this propose. If I get a good response I'll investigate potential issues and improve rfc and patch. Thanks, Shuhei

« previous php.internals (#70579) next »