Edit report at https://bugs.php.net/bug.php?id=69187&edit=1
ID: 69187
Comment by: bukka@php.net
Reported by: hdtfonseca at gmail dot com
Summary: json_last_error return BC in PHP7
Status: Closed
Type: Bug
Package: JSON related
Operating System: linux
PHP Version: master-Git-2015-03-04 (Git)
Assigned To: bukka
Block user comment: N
Private report: N
New Comment:
Closed and the test merged. Thanks for the contribution.
Previous Comments:
------------------------------------------------------------------------
[2015-03-06 23:12:40] hdtfonseca at gmail dot com
ok got it. I've finish the little tests. You can close this now.
------------------------------------------------------------------------
[2015-03-06 18:52:28] bukka@php.net
Yes this is correct. The reason for that is type casting. You could write it as:
(string) NULL === ""
(string) FALSE === ""
(string) TRUE === "1"
(string) 0 === "0"
(string) 1 === "1"
Nikic has a strong point that the json_decode is documented with first argument "string
$json" and as such we should follow ZPP casting rules in that case. It makes sense IMHO as it
will be consistent with most internal functions.
I have updated UPGRADING in https://github.com/php/php-src/commit/9d037d574cc359405c7a818c2235644633705999
------------------------------------------------------------------------
[2015-03-06 13:48:48] hdtfonseca at gmail dot com
Let's see if I got this.
NULL will return 4
"" will return 4
FALSE will return 4
TRUE will return 0
0 will return 0
1 will return 0
If I'm correct, I think that FALSE should return 0 instead.
(I'm creating a little test for this if you don't mind)
------------------------------------------------------------------------
[2015-03-06 12:53:17] bukka@php.net
@nikic I think you are right. It should stay as a standard string conversion and we shouldn't
have a special "hack" exceptions for specific types (null, false). I also think that we
shouldn't have error for true because then we would have to have error for scalar int or float
which would be unnecessary BC break. As such I think that it will be best to add just note about the
conversion to the UPGRADING where is already mentioned that empty string will emit error.
btw. The decoding JSON values that appear outside of object or array literals is not just a PHP
extension since March 2014 when RFC 7159 became a standard (see https://tools.ietf.org/html/rfc7159#section-2
) ;)
------------------------------------------------------------------------
[2015-03-06 12:20:18] nikic@php.net
@hdtfonseca: PHP also supports (as an extension to JSON - this is not supported by the standard
itself) decoding JSON values that appear outside of object or array literals. E.g. it's
possible to decode the string "1" to the value int(1). It just so happens that the string
representation of bool(true) in PHP is "1", which is why json_decode(true) === 1 (without
error).
------------------------------------------------------------------------
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=69187
--
Edit this bug report at https://bugs.php.net/bug.php?id=69187&edit=1