rfc:var-export-array-syntax

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rfc:var-export-array-syntax [2020/03/29 17:56] googleguyrfc:var-export-array-syntax [2020/04/10 09:24] (current) – typos, examples guilliamxavier
Line 12: Line 12:
  
 ===== Proposal ===== ===== Proposal =====
-Instead of <code php>array(1, 2, 3)</code> ''var_export()'' would produce <code php>[1, 2, 3]</code>+This change proposes adding a third optional argument for ''var_export()'' and 3 new bit-wise flags as follows: 
 + 
 +  - VAR_EXPORT_SHORT_ARRAY 
 +  - VAR_EXPORT_NO_INDEX 
 +  - VAR_EXPORT_COMPACT 
 + 
 +''VAR_EXPORT_SHORT_ARRAY'' triggers the short-hand syntax for arrays which affects all 3 cases (arrays, stdClass objects, other classes objects). ''VAR_EXPORT_NO_INDEX'' will discard sequential numbered indexes starting from 0, which is currently the default behavior to include them. ''VAR_EXPORT_COMPACT'' will compact the output to one line rather than adding the additional new line characters at each stage. 
 + 
 +Each option can be used alone, and can also be combined with other(s). 
 + 
 + 
 +For example, <php>var_export([1, 2, 3]);</php> produces 
 + 
 +<code php> 
 +array ( 
 +  0 => 1, 
 +  1 => 2, 
 +  2 => 3
 +) 
 +</code> 
 + 
 +and the new <php>var_export([1, 2, 3], false, VAR_EXPORT_SHORT_ARRAY);</php> would produce 
 + 
 +<code php> 
 +
 +  0 => 1, 
 +  1 => 2, 
 +  2 => 3, 
 +
 +</code> 
 + 
 +This would affect ''stdClass'' and other classes objects as well since they are exported using array literals (for ''(object)'' casting or ''%%__set_state()%%'' call) and they use the long-form array syntax above. 
 + 
 +So the following changes would also be in effect: 
 + 
 +<code php> 
 +$obj = new stdClass; 
 +$obj->foo = "bar"; 
 +$obj->baz = "quix"; 
 + 
 +var_export($obj); 
 +/* 
 +(object) array( 
 +   'foo' => 'bar', 
 +   'baz' => 'quix', 
 +
 +*/ 
 + 
 +var_export($obj, false, VAR_EXPORT_SHORT_ARRAY); 
 +/* 
 +(object) [ 
 +   'foo' => 'bar', 
 +   'baz' => 'quix', 
 +
 +*/ 
 +</code> 
 + 
 +Same for other classes: 
 + 
 +<code php> 
 +class Foo { 
 +    public $bar = "baz"; 
 +
 + 
 +var_export(new Foo); 
 +/* 
 +Foo::__set_state(array( 
 +   'bar' => 'baz', 
 +)) 
 +*/ 
 + 
 +var_export(new Foo, false, VAR_EXPORT_SHORT_ARRAY); 
 +/* 
 +Foo::__set_state([ 
 +   'bar' => 'baz', 
 +]) 
 +*/ 
 +</code> 
 + 
 +Using the other bitwise flags you could also do things like... 
 + 
 +<code php> 
 +var_export([1, 2, 3], false, VAR_EXPORT_NO_INDEX); 
 +/* 
 +array ( 
 +  1, 
 +  2, 
 +  3, 
 +
 +*/ 
 + 
 +var_export([1, 2, 3], false, VAR_EXPORT_COMPACT); 
 +/* 
 +array (0 => 1, 1 => 2, 2 => 3) 
 +*/ 
 +</code> 
 + 
 +and combine them... 
 + 
 +<code php> 
 +var_export([1, 2, 3], false, VAR_EXPORT_SHORT_ARRAY | VAR_EXPORT_NO_INDEX); 
 +/* 
 +
 +  1, 
 +  2, 
 +  3, 
 +
 +*/ 
 + 
 +var_export([1, 2, 3], false, VAR_EXPORT_SHORT_ARRAY | VAR_EXPORT_COMPACT); 
 +/* 
 +[0 => 1, 1 => 2, 2 => 3] 
 +*/ 
 + 
 +var_export([1, 2, 3], false, VAR_EXPORT_NO_INDEX | VAR_EXPORT_COMPACT); 
 +/* 
 +array (1, 2, 3) 
 +*/ 
 + 
 +var_export([1, 2, 3], false, VAR_EXPORT_SHORT_ARRAY | VAR_EXPORT_NO_INDEX | VAR_EXPORT_COMPACT); 
 +/* 
 +[1, 2, 3] 
 +*/ 
 +</code>
  
 ===== Backward Incompatible Changes ===== ===== Backward Incompatible Changes =====
Line 39: Line 162:
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
-The change only requires changing two lines in ''ext/standard/var.c'' (lines 530 and 540) to replace ''array ('' and '')'' with ''['' and '']''. See https://heap.space/xref/php-src/ext/standard/var.c?r=a9398056#530-540 for reference.+The change only requires changing two lines in ''ext/standard/var.c'' (lines 530 and 540) to replace ''array ('' and '')'' with ''['' and '']''. 
 + 
 +See https://heap.space/xref/php-src/ext/standard/var.c?r=a9398056#530-540 for reference.
  
 ===== Implementation ===== ===== Implementation =====
Line 45: Line 170:
 ===== References ===== ===== References =====
 https://heap.space/xref/php-src/ext/standard/var.c?r=a9398056#530-540 https://heap.space/xref/php-src/ext/standard/var.c?r=a9398056#530-540
 +
 https://news-web.php.net/php.internals/109415 https://news-web.php.net/php.internals/109415
 +
 +https://externals.io/message/109415#109415
  
 ===== Rejected Features ===== ===== Rejected Features =====
  
rfc/var-export-array-syntax.1585504594.txt.gz · Last modified: 2020/03/29 17:56 by googleguy