On 01/18/2015 02:08 PM, Rasmus Lerdorf wrote: > We have to be really really careful with this "oh, that code is wrong, > so we can break it argument". This will break hundreds if not thousands > of sites in a hard-to-debug way. It took me less than a minute of > looking on Github to find a case that will break: > > https://github.com/chenboking/service.downloadmanager.amule/blob/cda510415f9a58660e096a7de42b3ea6f39ee851/webserver/php-default/amuleweb-main-search.php#L121 > > It is extremely common to just do a less-than or a greater-than check in > a user comparison function. Of course it isn't textbook-correct, but > since it has always worked, people do it.
And just to further illustrate this, I just downloaded the current Wordpress release and sure enough, Wordpress would also be broken by this change. In http://core.svn.wordpress.org/trunk/wp-includes/class-simplepie.php look at the sort_items() method: /** * Sorting callback for items * * @access private * @param SimplePie $a * @param SimplePie $b * @return boolean */ public static function sort_items($a, $b) { return $a->get_date('U') <= $b->get_date('U'); } I am not saying we should revert the change, but we need to be very aware of the effect this change will have on PHP7 adoption. The really nasty part is that even if a big codebase has unit tests covering the code, unless the unit test actually tests an array with more than 16 elements, all tests will pass and the application will only fail in production with production data. And there are no errors or warnings of any sort either that will help people track this down. This will need to be front and center in the UPGRADING doc with an explanation about how to write a proper ordering function. -Rasmus
signature.asc
Description: OpenPGP digital signature