rfc:binary_string_comparison
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
rfc:binary_string_comparison [2014/08/16 08:05] – examples for <, <=, >, >= mabe | rfc:binary_string_comparison [2014/08/17 10:55] – sorting regular mabe | ||
---|---|---|---|
Line 17: | Line 17: | ||
The current behavior leads to bugs that are very hard to find/catch and it makes code hard to know what's going on. | The current behavior leads to bugs that are very hard to find/catch and it makes code hard to know what's going on. | ||
- | Using strict string comparison helps to workaround such behavior bit it ends up in using strict comparison all over which makes non-strict comparison useless. | + | Using strict string comparison helps to workaround such behavior bit it ends up in using strict comparison all over which makes non-strict comparison useless |
+ | |||
+ | Since PHP 5.2.1 '' | ||
===== Proposal ===== | ===== Proposal ===== | ||
Line 115: | Line 117: | ||
true (' | true (' | ||
false (' | false (' | ||
+ | |||
+ | === binary marked strings (since PHP 5.2.1) === | ||
+ | (http:// | ||
+ | |||
+ | <?php | ||
+ | var_dump((binary)' | ||
+ | var_dump(b' | ||
+ | |||
+ | Current Behavior (binary marked strings will be handled numerically): | ||
+ | |||
+ | bool(true) | ||
+ | bool(true) | ||
+ | |||
+ | Changed Behavior (all strings will be handled binary without a context): | ||
+ | |||
+ | bool(false) | ||
+ | bool(false) | ||
+ | |||
+ | === sorting of strings === | ||
+ | (http:// | ||
+ | |||
+ | <? | ||
+ | | ||
+ | $arr = array(' | ||
+ | | ||
+ | echo "Sort regular: | ||
+ | sort($arr); | ||
+ | var_dump($arr); | ||
+ | | ||
+ | echo "Sort numeric: | ||
+ | sort($arr, SORT_NUMERIC); | ||
+ | var_dump($arr); | ||
+ | | ||
+ | echo "Sort binary: | ||
+ | sort($arr, SORT_STRING); | ||
+ | var_dump($arr); | ||
+ | |||
+ | Current Behavior: | ||
+ | |||
+ | Sort regular: | ||
+ | array(6) { | ||
+ | [0] => | ||
+ | string(2) " | ||
+ | [1] => | ||
+ | string(1) " | ||
+ | [2] => | ||
+ | string(2) " | ||
+ | [3] => | ||
+ | int(2) | ||
+ | [4] => | ||
+ | int(3) | ||
+ | [5] => | ||
+ | string(2) " | ||
+ | } | ||
+ | Sort numeric: | ||
+ | array(6) { | ||
+ | [0] => | ||
+ | string(2) " | ||
+ | [1] => | ||
+ | string(1) " | ||
+ | [2] => | ||
+ | int(2) | ||
+ | [3] => | ||
+ | string(2) " | ||
+ | [4] => | ||
+ | string(2) " | ||
+ | [5] => | ||
+ | int(3) | ||
+ | } | ||
+ | Sort binary: | ||
+ | array(6) { | ||
+ | [0] => | ||
+ | string(2) " | ||
+ | [1] => | ||
+ | string(2) " | ||
+ | [2] => | ||
+ | string(2) " | ||
+ | [3] => | ||
+ | string(1) " | ||
+ | [4] => | ||
+ | int(2) | ||
+ | [5] => | ||
+ | int(3) | ||
+ | } | ||
+ | |||
+ | Changed Behavior: | ||
+ | |||
+ | Sort regular: | ||
+ | array(6) { | ||
+ | [0]=> | ||
+ | string(2) " | ||
+ | [1]=> | ||
+ | string(2) " | ||
+ | [2]=> | ||
+ | string(1) " | ||
+ | [3]=> | ||
+ | int(2) | ||
+ | [4]=> | ||
+ | int(3) | ||
+ | [5]=> | ||
+ | string(2) " | ||
+ | } | ||
+ | Sort numeric: | ||
+ | array(6) { | ||
+ | [0]=> | ||
+ | string(2) " | ||
+ | [1]=> | ||
+ | string(1) " | ||
+ | [2]=> | ||
+ | string(2) " | ||
+ | [3]=> | ||
+ | int(2) | ||
+ | [4]=> | ||
+ | string(2) " | ||
+ | [5]=> | ||
+ | int(3) | ||
+ | } | ||
+ | Sort binary: | ||
+ | array(6) { | ||
+ | [0]=> | ||
+ | string(2) " | ||
+ | [1]=> | ||
+ | string(2) " | ||
+ | [2]=> | ||
+ | string(2) " | ||
+ | [3]=> | ||
+ | string(1) " | ||
+ | [4]=> | ||
+ | int(2) | ||
+ | [5]=> | ||
+ | int(3) | ||
+ | } | ||
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== |
rfc/binary_string_comparison.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1