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
Last revisionBoth sides next revision
rfc:var-export-array-syntax [2020/03/30 16:02] googleguyrfc:var-export-array-syntax [2020/04/09 22:32] googleguy
Line 12: Line 12:
  
 ===== Proposal ===== ===== Proposal =====
 +This change proposes 3 new bit-wise optional flags for ''var_export()'' and adding a third optional argument 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, object casting, stdclass casting). ''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. The last two options can be used without ''VAR_EXPORT_SHORT_ARRAY'' so they will have an affect on the output even without short hand array syntax.
 +
 +
 Instead of Instead of
  
-<code php>array(1, 2, 3)</code>+<code php> 
 +array ( 
 +  0 => 1, 
 +  1 => 2, 
 +  2 => 3
 +) 
 +</code>
  
-''var_export()'' would produce+''var_export([1, 2, 3], false, VAR_EXPORT_SHORT_ARRAY)'' would now produce
  
-<code php>[1, 2, 3]</code>+<code php> 
 +[ 
 +  0 => 1, 
 +  0 => 2, 
 +  => 3, 
 +] 
 +</code>
  
 This will effect things like ''stdClass'' and ''set_state'' as well since they are cast to objects from array literals and they use the long-form array syntax above. This will effect things like ''stdClass'' and ''set_state'' as well since they are cast to objects from array literals and they use the long-form array syntax above.
Line 37: Line 58:
    'baz' => 'quix',    'baz' => 'quix',
 ) )
 +*/
  
-With the new change it would be+//With the new change it would be
  
 +var_export($obj, false, VAR_EXPORT_SHORT_ARRAY);
 +
 +/*
 (object) [ (object) [
    'foo' => 'bar',    'foo' => 'bar',
Line 61: Line 86:
    'bar' => 'baz',    'bar' => 'baz',
 )) ))
 +*/
  
-With the changes it would be:+ 
 +//With the changes it would be: 
 + 
 +var_export(new Foo, false, VAR_EXPORT_SHORT_ARRAY); 
 + 
 +/*
 Foo::__set_state([ Foo::__set_state([
    'bar' => 'baz',    'bar' => 'baz',
Line 69: Line 100:
 </code> </code>
  
-===== Backward Incompatible Changes ===== +Using the other bitwise flags you can also do things like...
-There shouldn't be any backwards incompatible changes as ''var_export()'' will continue to produce valid PHP code such that ''var_export()'' to PHP and PHP back to ''var_export()'' will continue to work as expectedThe syntax changes are all forwards compatible as of PHP 5.4 so we shouldn't see any issues here.+
  
-However, there are some tests that test the output of ''var_export''though I view this as a broken test more than I do a BC change. I liken this to a test which uses the value of a constant like ''E_ALL'' rather than just using the constant itself in testing that the constant works. Why not just test that ''var_export'' gives you back an array rather than test its output? It's all valid PHP code that we care about not the output itself. The output valuelike the constant valueis subject to change. That's why we use it in the first place. To prevent change from effecting the test (constant).+<code php> 
 +var_export([1,2,3]false, VAR_EXPORT_SHORT_ARRAY | VAR_EXPORT_NO_INDEX | VAR_EXPORT_COMPACT);
  
-I hope that's clear.+/* 
 +  outputs: 
 +   
 +  [1, 2, 3] 
 +*/
  
-In the event that this RFC is voted through I willhowever, be updating these tests.+var_export([1,2,3], false, VAR_EXPORT_SHORT_ARRAY | VAR_EXPORT_COMPACT); 
 + 
 +/* 
 +  outputs: 
 +   
 +  [0 => 1, 1 => 2, 2 => 3] 
 +*/ 
 + 
 +var_export([1,2,3], false, VAR_EXPORT_SHORT_ARRAY | VAR_EXPORT_NO_INDEX); 
 + 
 +/* 
 +  outputs: 
 +   
 +  [ 
 +    1, 
 +    2, 
 +    3 
 +  ] 
 +*/ 
 + 
 + 
 +</code> 
 + 
 +===== Backward Incompatible Changes ===== 
 +There shouldn'be any backwards incompatible changes as ''var_export()'' will continue to produce valid PHP code such that ''var_export()'' to PHP and PHP back to ''var_export()'' will continue to work as expected. The syntax changes are all forwards compatible as of PHP 5.4 so we shouldn't see any issues here.
  
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
Line 110: Line 169:
  
 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.txt · Last modified: 2020/04/10 09:24 by guilliamxavier