Skip to content

Commit acbf780

Browse files
committed
Improved number to string comparison semantics
RFC: https://wiki.php.net/rfc/string_to_number_comparison Closes GH-3886.
1 parent 2940839 commit acbf780

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+433
-264
lines changed

UPGRADING

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,11 @@ PHP 8.0 UPGRADE NOTES
199199
RFC: https://wiki.php.net/rfc/inheritance_private_methods
200200
. If an object constructor exit()s, the object destructor will no longer be
201201
called. This matches the behavior when the constructor throws.
202+
. Non-strict comparisons between numbers and non-numeric strings now work by
203+
casting the number to string and comparing the strings. Comparisons between
204+
numbers and numeric strings continue to work as before. Notably, this means
205+
that `0 == "not-a-number"` is considered false now.
206+
RFC: https://wiki.php.net/rfc/string_to_number_comparison
202207

203208
- COM:
204209
. Removed the ability to import case-insensitive constants from type

Zend/tests/compare_001.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ string(0) "" != array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
7070
string(0) "" == string(0) ""
7171
string(0) "" != int(1)
7272
string(0) "" != float(2.5)
73-
string(0) "" == int(0)
73+
string(0) "" != int(0)
7474
string(0) "" != string(6) "string"
7575
string(0) "" != string(3) "123"
7676
string(0) "" != string(3) "2.5"
@@ -130,11 +130,11 @@ float(2.5) != array(0) {}
130130
float(2.5) != int(-2147483648)
131131
float(2.5) != string(11) "-2147483648"
132132
int(0) != array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
133-
int(0) == string(0) ""
133+
int(0) != string(0) ""
134134
int(0) != int(1)
135135
int(0) != float(2.5)
136136
int(0) == int(0)
137-
int(0) == string(6) "string"
137+
int(0) != string(6) "string"
138138
int(0) != string(3) "123"
139139
int(0) != string(3) "2.5"
140140
int(0) == NULL
@@ -156,7 +156,7 @@ string(6) "string" != array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
156156
string(6) "string" != string(0) ""
157157
string(6) "string" != int(1)
158158
string(6) "string" != float(2.5)
159-
string(6) "string" == int(0)
159+
string(6) "string" != int(0)
160160
string(6) "string" == string(6) "string"
161161
string(6) "string" != string(3) "123"
162162
string(6) "string" != string(3) "2.5"

Zend/tests/compare_001_64bit.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ string(0) "" != array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
7070
string(0) "" == string(0) ""
7171
string(0) "" != int(1)
7272
string(0) "" != float(2.5)
73-
string(0) "" == int(0)
73+
string(0) "" != int(0)
7474
string(0) "" != string(6) "string"
7575
string(0) "" != string(3) "123"
7676
string(0) "" != string(3) "2.5"
@@ -130,11 +130,11 @@ float(2.5) != array(0) {}
130130
float(2.5) != int(-9223372036854775808)
131131
float(2.5) != string(20) "-9223372036854775808"
132132
int(0) != array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
133-
int(0) == string(0) ""
133+
int(0) != string(0) ""
134134
int(0) != int(1)
135135
int(0) != float(2.5)
136136
int(0) == int(0)
137-
int(0) == string(6) "string"
137+
int(0) != string(6) "string"
138138
int(0) != string(3) "123"
139139
int(0) != string(3) "2.5"
140140
int(0) == NULL
@@ -156,7 +156,7 @@ string(6) "string" != array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
156156
string(6) "string" != string(0) ""
157157
string(6) "string" != int(1)
158158
string(6) "string" != float(2.5)
159-
string(6) "string" == int(0)
159+
string(6) "string" != int(0)
160160
string(6) "string" == string(6) "string"
161161
string(6) "string" != string(3) "123"
162162
string(6) "string" != string(3) "2.5"

Zend/tests/compare_003.phpt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,14 @@ string(0) "" <= object(stdClass)#1 (0) {}
8181
string(0) "" <= object(stdClass)#2 (0) {}
8282
string(0) "" <= object(test)#3 (0) {}
8383
string(0) "" <= array(0) {}
84-
string(0) "" > int(-2147483648)
84+
string(0) "" <= int(-2147483648)
8585
string(0) "" <= string(11) "-2147483648"
8686
int(1) <= array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
8787
int(1) > string(0) ""
8888
int(1) <= int(1)
8989
int(1) <= float(2.5)
9090
int(1) > int(0)
91-
int(1) > string(6) "string"
91+
int(1) <= string(6) "string"
9292
int(1) <= string(3) "123"
9393
int(1) <= string(3) "2.5"
9494
int(1) > NULL
@@ -111,7 +111,7 @@ float(2.5) > string(0) ""
111111
float(2.5) > int(1)
112112
float(2.5) <= float(2.5)
113113
float(2.5) > int(0)
114-
float(2.5) > string(6) "string"
114+
float(2.5) <= string(6) "string"
115115
float(2.5) <= string(3) "123"
116116
float(2.5) <= string(3) "2.5"
117117
float(2.5) > NULL
@@ -130,7 +130,7 @@ float(2.5) <= array(0) {}
130130
float(2.5) > int(-2147483648)
131131
float(2.5) > string(11) "-2147483648"
132132
int(0) <= array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
133-
int(0) <= string(0) ""
133+
int(0) > string(0) ""
134134
int(0) <= int(1)
135135
int(0) <= float(2.5)
136136
int(0) <= int(0)
@@ -154,9 +154,9 @@ int(0) > int(-2147483648)
154154
int(0) > string(11) "-2147483648"
155155
string(6) "string" <= array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
156156
string(6) "string" > string(0) ""
157-
string(6) "string" <= int(1)
158-
string(6) "string" <= float(2.5)
159-
string(6) "string" <= int(0)
157+
string(6) "string" > int(1)
158+
string(6) "string" > float(2.5)
159+
string(6) "string" > int(0)
160160
string(6) "string" <= string(6) "string"
161161
string(6) "string" > string(3) "123"
162162
string(6) "string" > string(3) "2.5"
@@ -347,7 +347,7 @@ array(0) {} <= array(0) {}
347347
array(0) {} > int(-2147483648)
348348
array(0) {} > string(11) "-2147483648"
349349
int(-2147483648) <= array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
350-
int(-2147483648) <= string(0) ""
350+
int(-2147483648) > string(0) ""
351351
int(-2147483648) <= int(1)
352352
int(-2147483648) <= float(2.5)
353353
int(-2147483648) <= int(0)

Zend/tests/compare_003_64bit.phpt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,14 @@ string(0) "" <= object(stdClass)#%d (0) {}
8181
string(0) "" <= object(stdClass)#%d (0) {}
8282
string(0) "" <= object(test)#%d (0) {}
8383
string(0) "" <= array(0) {}
84-
string(0) "" > int(-9223372036854775808)
84+
string(0) "" <= int(-9223372036854775808)
8585
string(0) "" <= string(20) "-9223372036854775808"
8686
int(1) <= array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
8787
int(1) > string(0) ""
8888
int(1) <= int(1)
8989
int(1) <= float(2.5)
9090
int(1) > int(0)
91-
int(1) > string(6) "string"
91+
int(1) <= string(6) "string"
9292
int(1) <= string(3) "123"
9393
int(1) <= string(3) "2.5"
9494
int(1) > NULL
@@ -111,7 +111,7 @@ float(2.5) > string(0) ""
111111
float(2.5) > int(1)
112112
float(2.5) <= float(2.5)
113113
float(2.5) > int(0)
114-
float(2.5) > string(6) "string"
114+
float(2.5) <= string(6) "string"
115115
float(2.5) <= string(3) "123"
116116
float(2.5) <= string(3) "2.5"
117117
float(2.5) > NULL
@@ -130,7 +130,7 @@ float(2.5) <= array(0) {}
130130
float(2.5) > int(-9223372036854775808)
131131
float(2.5) > string(20) "-9223372036854775808"
132132
int(0) <= array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
133-
int(0) <= string(0) ""
133+
int(0) > string(0) ""
134134
int(0) <= int(1)
135135
int(0) <= float(2.5)
136136
int(0) <= int(0)
@@ -154,9 +154,9 @@ int(0) > int(-9223372036854775808)
154154
int(0) > string(20) "-9223372036854775808"
155155
string(6) "string" <= array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
156156
string(6) "string" > string(0) ""
157-
string(6) "string" <= int(1)
158-
string(6) "string" <= float(2.5)
159-
string(6) "string" <= int(0)
157+
string(6) "string" > int(1)
158+
string(6) "string" > float(2.5)
159+
string(6) "string" > int(0)
160160
string(6) "string" <= string(6) "string"
161161
string(6) "string" > string(3) "123"
162162
string(6) "string" > string(3) "2.5"
@@ -347,7 +347,7 @@ array(0) {} <= array(0) {}
347347
array(0) {} > int(-9223372036854775808)
348348
array(0) {} > string(20) "-9223372036854775808"
349349
int(-9223372036854775808) <= array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
350-
int(-9223372036854775808) <= string(0) ""
350+
int(-9223372036854775808) > string(0) ""
351351
int(-9223372036854775808) <= int(1)
352352
int(-9223372036854775808) <= float(2.5)
353353
int(-9223372036854775808) <= int(0)

Zend/tests/compare_004.phpt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ string(0) "" < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
7070
string(0) "" >= string(0) ""
7171
string(0) "" < int(1)
7272
string(0) "" < float(2.5)
73-
string(0) "" >= int(0)
73+
string(0) "" < int(0)
7474
string(0) "" < string(6) "string"
7575
string(0) "" < string(3) "123"
7676
string(0) "" < string(3) "2.5"
@@ -81,14 +81,14 @@ string(0) "" < object(stdClass)#1 (0) {}
8181
string(0) "" < object(stdClass)#2 (0) {}
8282
string(0) "" < object(test)#3 (0) {}
8383
string(0) "" < array(0) {}
84-
string(0) "" >= int(-2147483648)
84+
string(0) "" < int(-2147483648)
8585
string(0) "" < string(11) "-2147483648"
8686
int(1) < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
8787
int(1) >= string(0) ""
8888
int(1) >= int(1)
8989
int(1) < float(2.5)
9090
int(1) >= int(0)
91-
int(1) >= string(6) "string"
91+
int(1) < string(6) "string"
9292
int(1) < string(3) "123"
9393
int(1) < string(3) "2.5"
9494
int(1) >= NULL
@@ -111,7 +111,7 @@ float(2.5) >= string(0) ""
111111
float(2.5) >= int(1)
112112
float(2.5) >= float(2.5)
113113
float(2.5) >= int(0)
114-
float(2.5) >= string(6) "string"
114+
float(2.5) < string(6) "string"
115115
float(2.5) < string(3) "123"
116116
float(2.5) >= string(3) "2.5"
117117
float(2.5) >= NULL
@@ -134,7 +134,7 @@ int(0) >= string(0) ""
134134
int(0) < int(1)
135135
int(0) < float(2.5)
136136
int(0) >= int(0)
137-
int(0) >= string(6) "string"
137+
int(0) < string(6) "string"
138138
int(0) < string(3) "123"
139139
int(0) < string(3) "2.5"
140140
int(0) >= NULL
@@ -154,8 +154,8 @@ int(0) >= int(-2147483648)
154154
int(0) >= string(11) "-2147483648"
155155
string(6) "string" < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
156156
string(6) "string" >= string(0) ""
157-
string(6) "string" < int(1)
158-
string(6) "string" < float(2.5)
157+
string(6) "string" >= int(1)
158+
string(6) "string" >= float(2.5)
159159
string(6) "string" >= int(0)
160160
string(6) "string" >= string(6) "string"
161161
string(6) "string" >= string(3) "123"
@@ -347,7 +347,7 @@ array(0) {} >= array(0) {}
347347
array(0) {} >= int(-2147483648)
348348
array(0) {} >= string(11) "-2147483648"
349349
int(-2147483648) < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
350-
int(-2147483648) < string(0) ""
350+
int(-2147483648) >= string(0) ""
351351
int(-2147483648) < int(1)
352352
int(-2147483648) < float(2.5)
353353
int(-2147483648) < int(0)

Zend/tests/compare_004_64bit.phpt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ string(0) "" < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
7070
string(0) "" >= string(0) ""
7171
string(0) "" < int(1)
7272
string(0) "" < float(2.5)
73-
string(0) "" >= int(0)
73+
string(0) "" < int(0)
7474
string(0) "" < string(6) "string"
7575
string(0) "" < string(3) "123"
7676
string(0) "" < string(3) "2.5"
@@ -81,14 +81,14 @@ string(0) "" < object(stdClass)#%d (0) {}
8181
string(0) "" < object(stdClass)#%d (0) {}
8282
string(0) "" < object(test)#%d (0) {}
8383
string(0) "" < array(0) {}
84-
string(0) "" >= int(-9223372036854775808)
84+
string(0) "" < int(-9223372036854775808)
8585
string(0) "" < string(20) "-9223372036854775808"
8686
int(1) < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
8787
int(1) >= string(0) ""
8888
int(1) >= int(1)
8989
int(1) < float(2.5)
9090
int(1) >= int(0)
91-
int(1) >= string(6) "string"
91+
int(1) < string(6) "string"
9292
int(1) < string(3) "123"
9393
int(1) < string(3) "2.5"
9494
int(1) >= NULL
@@ -111,7 +111,7 @@ float(2.5) >= string(0) ""
111111
float(2.5) >= int(1)
112112
float(2.5) >= float(2.5)
113113
float(2.5) >= int(0)
114-
float(2.5) >= string(6) "string"
114+
float(2.5) < string(6) "string"
115115
float(2.5) < string(3) "123"
116116
float(2.5) >= string(3) "2.5"
117117
float(2.5) >= NULL
@@ -134,7 +134,7 @@ int(0) >= string(0) ""
134134
int(0) < int(1)
135135
int(0) < float(2.5)
136136
int(0) >= int(0)
137-
int(0) >= string(6) "string"
137+
int(0) < string(6) "string"
138138
int(0) < string(3) "123"
139139
int(0) < string(3) "2.5"
140140
int(0) >= NULL
@@ -154,8 +154,8 @@ int(0) >= int(-9223372036854775808)
154154
int(0) >= string(20) "-9223372036854775808"
155155
string(6) "string" < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
156156
string(6) "string" >= string(0) ""
157-
string(6) "string" < int(1)
158-
string(6) "string" < float(2.5)
157+
string(6) "string" >= int(1)
158+
string(6) "string" >= float(2.5)
159159
string(6) "string" >= int(0)
160160
string(6) "string" >= string(6) "string"
161161
string(6) "string" >= string(3) "123"
@@ -347,7 +347,7 @@ array(0) {} >= array(0) {}
347347
array(0) {} >= int(-9223372036854775808)
348348
array(0) {} >= string(20) "-9223372036854775808"
349349
int(-9223372036854775808) < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
350-
int(-9223372036854775808) < string(0) ""
350+
int(-9223372036854775808) >= string(0) ""
351351
int(-9223372036854775808) < int(1)
352352
int(-9223372036854775808) < float(2.5)
353353
int(-9223372036854775808) < int(0)

Zend/tests/compare_005.phpt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ string(0) "" < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
7070
string(0) "" >= string(0) ""
7171
string(0) "" < int(1)
7272
string(0) "" < float(2.5)
73-
string(0) "" >= int(0)
73+
string(0) "" < int(0)
7474
string(0) "" < string(6) "string"
7575
string(0) "" < string(3) "123"
7676
string(0) "" < string(3) "2.5"
@@ -81,14 +81,14 @@ string(0) "" < object(stdClass)#1 (0) {}
8181
string(0) "" < object(stdClass)#2 (0) {}
8282
string(0) "" < object(test)#3 (0) {}
8383
string(0) "" < array(0) {}
84-
string(0) "" >= int(-2147483648)
84+
string(0) "" < int(-2147483648)
8585
string(0) "" < string(11) "-2147483648"
8686
int(1) < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
8787
int(1) >= string(0) ""
8888
int(1) >= int(1)
8989
int(1) < float(2.5)
9090
int(1) >= int(0)
91-
int(1) >= string(6) "string"
91+
int(1) < string(6) "string"
9292
int(1) < string(3) "123"
9393
int(1) < string(3) "2.5"
9494
int(1) >= NULL
@@ -111,7 +111,7 @@ float(2.5) >= string(0) ""
111111
float(2.5) >= int(1)
112112
float(2.5) >= float(2.5)
113113
float(2.5) >= int(0)
114-
float(2.5) >= string(6) "string"
114+
float(2.5) < string(6) "string"
115115
float(2.5) < string(3) "123"
116116
float(2.5) >= string(3) "2.5"
117117
float(2.5) >= NULL
@@ -134,7 +134,7 @@ int(0) >= string(0) ""
134134
int(0) < int(1)
135135
int(0) < float(2.5)
136136
int(0) >= int(0)
137-
int(0) >= string(6) "string"
137+
int(0) < string(6) "string"
138138
int(0) < string(3) "123"
139139
int(0) < string(3) "2.5"
140140
int(0) >= NULL
@@ -154,8 +154,8 @@ int(0) >= int(-2147483648)
154154
int(0) >= string(11) "-2147483648"
155155
string(6) "string" < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
156156
string(6) "string" >= string(0) ""
157-
string(6) "string" < int(1)
158-
string(6) "string" < float(2.5)
157+
string(6) "string" >= int(1)
158+
string(6) "string" >= float(2.5)
159159
string(6) "string" >= int(0)
160160
string(6) "string" >= string(6) "string"
161161
string(6) "string" >= string(3) "123"
@@ -347,7 +347,7 @@ array(0) {} >= array(0) {}
347347
array(0) {} >= int(-2147483648)
348348
array(0) {} >= string(11) "-2147483648"
349349
int(-2147483648) < array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}
350-
int(-2147483648) < string(0) ""
350+
int(-2147483648) >= string(0) ""
351351
int(-2147483648) < int(1)
352352
int(-2147483648) < float(2.5)
353353
int(-2147483648) < int(0)

0 commit comments

Comments
 (0)