Req #67904 [Com]: Array/object to number/string comparison should be deprecated

From: Date: Thu, 19 Sep 2019 06:59:33 +0000
Subject: Req #67904 [Com]: Array/object to number/string comparison should be deprecated
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-222822@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=67904&edit=1

 ID:                 67904
 Comment by:         fabien dot villepinte at gmail dot com
 Reported by:        john dot wellesz at teaser dot fr
 Summary:            Array/object to number/string comparison should be
                     deprecated
 Status:             Open
 Type:               Feature/Change Request
 Package:            Arrays related
 Operating System:   Debian Wheezy
 PHP Version:        5.5.16
 Block user comment: N
 Private report:     N

 New Comment:

Hi,
I've faced this issue recently. An array was mistakenly compared to an integer and no notice
was emitted.
I'm not in favor to change the result of a such comparison but raising a notice would be a
great help.


Previous Comments:
------------------------------------------------------------------------
[2014-08-26 02:48:43] john dot wellesz at teaser dot fr

Description:
------------
Currently when a an array/object is compared to a number (or string), PHP doesn't issue any
E_NOTICE or E_STRICT, the comparison is done and the array/object is always greater (as documented
in http://php.net/manual/en/language.operators.comparison.php).

I think that this 'feature' is detrimental to PHP and a source of confusion and waiting to
happen catastrophes.

Reasons:
- 99.9% of such comparison are programming mistakes.
- There is no reason to expect objects or arrays to be always greater than _any_ number or string.
- The fact that no error at all is thrown when such comparison is performed is generally unexpected.

So I think that in future versions of PHP it would be nice if at least an E_STRICT was thrown.


Test script:
---------------
<?php

error_reporting(E_ALL | E_STRICT);

var_dump([7, 11] > 'foo', [1] > 42);

Expected result:
----------------
E_STRICT
NULL
E_STRICT
NULL


Actual result:
--------------
bool(true)
bool(true)


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=67904&edit=1


Thread (3 messages)

« previous php.bugs (#222822) next »