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