rfc:base_convert_improvements

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:base_convert_improvements [2019/05/23 12:03] – formatting nikicrfc:base_convert_improvements [2020/08/01 23:53] (current) – RFC was implemented carusogabriel
Line 3: Line 3:
   * Date: 2019-05-15   * Date: 2019-05-15
   * Author: Scott Dutton,php@exussum.co.uk   * Author: Scott Dutton,php@exussum.co.uk
-  * Status: Under Discussion+  * Status: Implemented (in PHP 7.4)
   * First Published at: https://wiki.php.net/rfc/base_convert_improvements   * First Published at: https://wiki.php.net/rfc/base_convert_improvements
  
Line 13: Line 13:
 For example base_convert("hello world", 16, 10); will return 237 with no warnings. What this does internally is base_convert("ed", 16, 10);  For example base_convert("hello world", 16, 10); will return 237 with no warnings. What this does internally is base_convert("ed", 16, 10); 
  
-Also negative numbers simply do not work, eg base_convert("-ff", 16, 10); will return 255. (similar to above the "-" gets silently ignored)+Also negative numbers simply do not work, eg base_convert("-ff", 16, 10); will return 255. (similar to above the "-" gets silently ignored).
  
-Other functions effected by this are:+Experienced developers get caught out by this for example  https://gist.github.com/iansltx/4820b02ab276c3306314daaa41573445#file-getlines-php-L9 
 + 
 +In this case literal binary data was the input and the result was 0 (which is expected but not clear) 
 + 
 +Other functions affected by this are:
  
   * decbin() - Decimal to binary   * decbin() - Decimal to binary
Line 23: Line 27:
   * dechex() - Decimal to hexadecimal   * dechex() - Decimal to hexadecimal
   * hexdec() - Hexadecimal to decimal   * hexdec() - Hexadecimal to decimal
 +
 +
 +
 +Other programming languages behave in a a similar way to this proposal
 + * Javascript - https://jsfiddle.net/c16b4usp/
 + * Python - https://repl.it/repls/OliveBlushingModem
 + * Go - https://play.golang.org/p/aLWg15c00Fy
 +
 +Javascript does work with larger numbers correctly, Python and Go work in a way which would be similar to PHP if this change was made.
  
  
Line 49: Line 62:
 This currently breaks a fair amount of unit tests that I will need to update if this change is accepted.  The unit tests are around extreme values. This currently breaks a fair amount of unit tests that I will need to update if this change is accepted.  The unit tests are around extreme values.
  
-This issue has been worked around in userland PHP for example+A secondary BC change would be people who have worked around this in userland code for example 
 https://stackoverflow.com/a/7051224/1281385 https://stackoverflow.com/a/7051224/1281385
  
 This change will break these work arounds This change will break these work arounds
  
 +Would suggest PHP8 for this change
  
  
Line 83: Line 98:
  
 ===== Future Scope ===== ===== Future Scope =====
-N/A+Allow base_convert to allow any length input and not be restricted to a 64 bit int type
  
 ===== Proposed Voting Choices ===== ===== Proposed Voting Choices =====
-Include these so readers know where you are heading and can discuss the proposed voting options.+2 votes 
 +=== Error on ignored characters === 
 +This vote will be to raise a E_DEPRECATED warning for PHP 7.4. Raising to be an InvalidArgumentException in PHP 8 
 + 
 +=== Allow negative arguments === 
 +This vote will allow negative arguments in PHP 8
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
 https://github.com/php/php-src/pull/3911 https://github.com/php/php-src/pull/3911
  
-===== Implementation ===== 
-After the project is implemented, this section should contain  
-  - the version(s) it was merged into 
-  - a link to the git commit(s) 
-  - a link to the PHP manual entry for the feature 
-  - a link to the language specification section (if any) 
  
 +===== Vote =====
 +Started 19th June 2019. Ends 3rd July 2019
 +<doodle title="Raise deprecated error in 7.4 and raise to exception in PHP 8 for unknown characters" auth="exussum" voteType="single" closed="true">
 +   * Yes
 +   * No
 +</doodle>
 +
 +<doodle title="Allow negative numbers to be converted in PHP 8" auth="exussum" voteType="single" closed="true">
 +   * Yes
 +   * No
 +</doodle>
 ===== References ===== ===== References =====
 https://bugs.php.net/bug.php?id=61740 https://bugs.php.net/bug.php?id=61740
rfc/base_convert_improvements.1558613004.txt.gz · Last modified: 2019/05/23 12:03 by nikic