rfc:comparison_inconsistency

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
Next revisionBoth sides next revision
rfc:comparison_inconsistency [2013/11/20 21:57] – [Conversion/comparison] yohgakirfc:comparison_inconsistency [2014/01/08 01:54] yohgaki
Line 1: Line 1:
  
-====== PHP RFC: Existing comparison and conversion inconsistency  ======+====== PHP RFC: Existing comparison and conversion behaviors to discuss/document  ======
   * Version: 0.1   * Version: 0.1
   * Date: 2013-10-31   * Date: 2013-10-31
Line 115: Line 115:
  
 === Array of Chars === === Array of Chars ===
 +
 +Null string is not handled as ARRAY.
  
 https://github.com/php/php-src/pull/463 https://github.com/php/php-src/pull/463
  
 Test script: Test script:
-  --------------- 
   $a = ''; // empty string   $a = ''; // empty string
   $a[10] = 'a';   $a[10] = 'a';
Line 129: Line 130:
  
 Expected result: Expected result:
-  ---------------- 
   "          a"   "          a"
   "          b"   "          b"
  
 Actual result: Actual result:
-  -------------- 
   "Array"   "Array"
   "          b"   "          b"
 +
 +=== String Integer conversion ===
 +
 +PHP converts "integer like string to integer".
 +
 +  <?php
 +  
 +  // this is the problem, which we'd expect
 +  // to return false, but which returns true:
 +  echo (2 == '2b').'<br />';
 +  
 +  // this is probably what's happening:
 +  echo (2 == intval('2b')).'<br />';
 +  
 +  // this is what probably should happen:
 +  echo (strval(2) != '2b').'<br />';
 +  
 +  ?>
 +
 +https://bugs.php.net/bug.php?id=66211
 +
 +=== NAN/INF of float ===
 +
 +NAN/INF issue.
 +
 +  $f = NAN;
 +  var_dump(++$f);                 // float NAN
 +  var_dump((float) NAN);   // float NAN
 +  var_dump((int) NAN);       // int -2147483648 -> what?
 +  var_dump((bool) NAN);   // bool true -> makes sense
 +  
 +  $f = INF;
 +  var_dump(++$f);                         // float INF
 +  var_dump((float) INF);             // float INF
 +  var_dump((int) INF);                 // int 0 -> what?
 +  var_dump((bool) INF);             // bool true -> so why int 0?
 +  var_dump((int) (bool) INF);   // int 1
 +
 +E_WARNING for these invalid/unreliable operations might be better.
 + 
 +This could be mitigated by GMP float support.
 +
 +
 +=== Object Array conversion of numeric property/index ===
 +
 +https://bugs.php.net/bug.php?id=66173
 +
 +  $ php -v
 +  PHP 5.5.7 (cli) (built: Dec 11 2013 07:51:06) 
 +  Copyright (c) 1997-2013 The PHP Group
 +  Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
 +  
 +  $ php -r '$obj = new StdClass; $obj->{12} = 234; ${1} = 567; var_dump($obj, ${1}); $ary = (array)$obj; var_dump($ary, $ary[12]);'
 +  object(stdClass)#1 (1) {
 +    ["12"]=>
 +    int(234)
 +  }
 +  int(567)
 +
 +
 +  Notice: Undefined offset: 12 in Command line code on line 1
 +  array(1) {
 +    ["12"]=>
 +    int(234)
 +  }
 +  NULL <= SHOULD BE int(234)
 +
 +
  
  
 ==== Function/Method ==== ==== Function/Method ====
 +
 +=== is_numeric ===
 +
 +https://bugs.php.net/bug.php?id=66399
 +
 +
 +=== base_convert ====
 +
 +https://wiki.php.net/rfc/base-convert
 +
  
 === min() function === === min() function ===
Line 173: Line 250:
 There are bug reports that complain return value inconsistency. The document could be improved with more explanations. There are bug reports that complain return value inconsistency. The document could be improved with more explanations.
  
-== Related Bug Reports ==+**Related Bug Reports**
   * https://bugs.php.net/bug.php?id=60338 (Returns value for wrong key())   * https://bugs.php.net/bug.php?id=60338 (Returns value for wrong key())
   * https://bugs.php.net/bug.php?id=64860 (returns NULL for wrong file parameter)   * https://bugs.php.net/bug.php?id=64860 (returns NULL for wrong file parameter)