rfc:inconsistent-behaviors

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:inconsistent-behaviors [2014/02/05 21:44] – Added notes about PHP numeroalphabetic behavior as unexceptional sanfordwhitemanrfc:inconsistent-behaviors [2017/09/22 13:28] – external edit 127.0.0.1
Line 25: Line 25:
  
 Type juggling only works for INTEGER or HEX like strings. Type juggling only works for INTEGER or HEX like strings.
 +
 +Most problematic is HEX like strings being auto-coerced during
 +comparison, but using //different rules// from manual casting. That
 +is, ( 0x0A == "0x0A" ) is not treated as ( 0x0A == (int)"0x0A" ),
 +although "0x0A" //is// translated to a number.
 +
 +This despite http://us2.php.net/manual/en/language.operators.comparison.php, which
 +states clearly that for number-string comparison, we "Translate
 +strings and resources to numbers." While it is feasible that some
 +string patterns cannot be "translated" (OCTAL and BINARY) at all, once
 +a "translation" is attempted, it should follow the same rules as (int)
 +casting for the same string. It is hard to view it is anything but a
 +bug that it does not.
  
 === HEX === === HEX ===
Line 159: Line 172:
  
 Not only is this not a bug, it isn't even exceptional behavior on the Not only is this not a bug, it isn't even exceptional behavior on the
-modern web. A user who find this behavior surprising is likely+modern web. Users who find this behavior surprising are likely
 inexperienced with MySQL -- clearly PHP's partner in server-side inexperienced with MySQL -- clearly PHP's partner in server-side
 ubiquity as part of the dominant *AMP stack -- which has the exact ubiquity as part of the dominant *AMP stack -- which has the exact
 same rules for auto-coercion of "numeroalphabetic" strings in a same rules for auto-coercion of "numeroalphabetic" strings in a
-comparison context.+comparison context. 
  
 In MySQL (all supported versions): In MySQL (all supported versions):
Line 285: Line 298:
  
 https://wiki.php.net/rfc/base-convert https://wiki.php.net/rfc/base-convert
 +
 +
 +
 +==== filter_var ====
 +
 +https://bugs.php.net/bug.php?id=66682
 +
 +<code php>
 +var_dump(filter_var('01', FILTER_VALIDATE_INT));
 +var_dump(filter_var('01', FILTER_VALIDATE_FLOAT));
 +</code>
 +
 +<code>
 +bool(false)
 +double(1)
 +</code>
  
  
Line 303: Line 332:
  
 http://jp2.php.net/min http://jp2.php.net/min
 +
 +
  
  
rfc/inconsistent-behaviors.txt · Last modified: 2021/03/27 14:31 by ilutov