Doc #81398 [Com]: Comparing int/string with max() always returns string
[email protected] ("samira dot akhlaqi314 at gmail dot com") Mon, 19 Dec 2022 05:28:53 +0000
| Newsgroups | php.doc.bugs |
|---|---|
| Message-ID | <[email protected]> |
Edit report at https://bugs.php.net/bug.php?id=81398&edit=1
ID: 81398
Comment by: samira dot akhlaqi314 at gmail dot com
Reported by: php at ober-mail dot de
Summary: Comparing int/string with max() always returns
string
Status: Verified
Type: Documentation Problem
Package: *Math Functions
Operating System: Debian 10
PHP Version: 8.0.10
Block user comment: N
Private report: N
New Comment:
The actual value returned will be of the original type with no conversion applied.
(https://www.marykayintouch.one/)php.net
Previous Comments:
------------------------------------------------------------------------
[2021-08-30 09:04:32] [email protected]
When the page, currently, says, "a non-numeric string will be compared to an int as though it were 0" it is incorrect as of PHP 8.0.0.
For your specific example of max(1, "A"), the 1 is (as of PHP 8.0.0) converted to a string ("1") then compared to "A" and the latter ("A") is the greater of the two. If your example was max(1, "/"), then the comparison would be of "1" and "/", in which case "1" is greater so the result would be 1.
------------------------------------------------------------------------
[2021-08-30 08:23:21] php at ober-mail dot de
@danack: Sorry, I still don't get it.
If `max(1, "A")` is COMPARED like `max(1, 0)`, why isn't int(1) returned? Isn't int(1) larger than string("A"), which is treated like int(0)?
------------------------------------------------------------------------
[2021-08-29 23:32:06] [email protected]
This behaviour (comparing numbers and non-numeric strings) changed in PHP 8.0.0, resulting from the "saner string to number comparisons" RFC [1].
It is briefly mentioned as a backwards incompatible change in the migration guide for PHP 8.0.x [2].
The descriptions (in the comparison operators page [3], on the max() [4] and min() [5] pages, and all other relevant pages) has to be updated accordingly, if not done already.
[1] https://wiki.php.net/rfc/string_to_number_comparison
[2] https://www.php.net/manual/en/migration80.incompatible.php
[3] https://www.php.net/manual/en/language.operators.comparison.php
[4] https://www.php.net/manual/en/function.max.php
[5] https://www.php.net/manual/en/function.min.php
------------------------------------------------------------------------
[2021-08-29 22:50:11] [email protected]
"will be COMPARED...The actual value RETURNED will be of the original type".
------------------------------------------------------------------------
[2021-08-29 22:48:14] php at ober-mail dot de
Well, after reading it again, it does not seem clear at all.
If a string is treated as int(0), why is the string returned in my example? Isn't 1 larger than 0?
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=81398
--
Edit this bug report at https://bugs.php.net/bug.php?id=81398&edit=1