rfc:convert_numeric_keys_in_object_array_casts

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
rfc:convert_numeric_keys_in_object_array_casts [2017/11/30 14:49]
ajf fixup
rfc:convert_numeric_keys_in_object_array_casts [2017/11/30 14:50] (current)
ajf
Line 30: Line 30:
 ==== High-level ==== ==== High-level ====
  
-This RFC proposes to fix this issue for object-to-array casts and array-to-object casts, both for the casting operators and for <​php>​settype()</​php>,​ and also fix the same issue in <​php>​get_object_vars()</​php>​. This would be done by converting the keys of array or object HashTables as appropriate,​ so numeric string property names in objects would be converted to integer array keys, and vice-versa. Therefore, there would be no inaccessible properties. For example, <​php>​$arr = [0 => 1, 1 => 2, 2 => 3]; $obj = (object)$arr;</​php>​ would now produce an object with accessible properties named <​php>"​0"</​php>,​ <​php>"​1"</​php>​ and <​php>"​2"</​php>,​ and <​php>​$obj = new stdClass; $obj->​{'​0'​} = 1; $obj->​{'​1'​} = 2; $obj->​{'​2'​} = 3; $arr = (array)$obj;</​php>​ would now produce an array with the accessible keys <​php>​0</​php>,​ <​php>​1</​php>​ and <​php>​2</​php>​.+This RFC proposes to fix this issue for object-to-array casts and array-to-object casts, both for the casting operators and for <​php>​settype()</​php>,​ and also fix the same issue in <​php>​get_object_vars()</​php>​. This would be done by converting the keys of array or object HashTables as appropriate,​ so numeric string property names in objects would be converted to integer array keys, and vice-versa. Therefore, there would be no inaccessible properties. For example, <​php>​$arr = [0 => 1, 1 => 2, 2 => 3]; $obj = (object)$arr;</​php>​ would now produce an object with accessible properties named <​php>"​0"</​php>,​ <​php>"​1"</​php>​ and <​php>"​2"</​php>,​ and <​php>​$obj = new stdClass; $obj->​{'​0'​} = 1; $obj->​{'​1'​} = 2; $obj->​{'​2'​} = 3; $arr = (array)$obj;</​php>​ would now produce an array with the accessible keys <php> 0</​php>,​ <​php>​1</​php>​ and <​php>​2</​php>​.
  
 ==== Internals ==== ==== Internals ====
rfc/convert_numeric_keys_in_object_array_casts.txt · Last modified: 2017/11/30 14:50 by ajf