Doc #73267 [Csd]: Order by callback changed

From: Date: Tue, 18 Oct 2016 14:58:26 +0000
Subject: Doc #73267 [Csd]: Order by callback changed
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-14026@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73267&edit=1 ID: 73267 Updated by: cmb@php.net Reported by: me at evertpot dot com Summary: Order by callback changed Status: Closed Type: Documentation Problem Package: Arrays related PHP Version: 7.1.0RC3 Assigned To: cmb Block user comment: N Private report: N New Comment: I've noticed that the 7.0 UPGRADING has a respective note[1], so it appears to be okay to also add notes to the 7.0 and 7.1 migration guides. > I definitely meant to mark it as a "documentation bug" but > somehow that setting got lost. That's a nasty bug of the bug tracker. Previewing discards any changes to the "Bug Type". [1] <https://github.com/php/php-src/blob/PHP-7.0.12/UPGRADING#L434-L435> Previous Comments: ------------------------------------------------------------------------ [2016-10-08 15:23:39] me at evertpot dot com Hi cmb, Thanks for the quick change. I definitely meant to mark it as a "documentation bug" but somehow that setting got lost. I actually have a simpler test-case that demonstrates that it's not just equality of identical values: https://3v4l.org/kH84K It was a bit late yesterday, so I didn't catch this. Now the result of this function might also (as you said) "undefined", and I readily admit that my unittest was wrong assuming a certain output, but it might still be a nice courtesy to include it in the migration documentation. Of course you can include in that document that relying on a sort order in the first place was wrong. ------------------------------------------------------------------------ [2016-10-08 09:12:19] cmb@php.net Automatic comment from SVN on behalf of cmb Revision: http://svn.php.net/viewvc/?view=revision&amp;revision=340377 Log: Fix #73267: Order by callback changed ------------------------------------------------------------------------ [2016-10-08 09:10:45] cmb@php.net Indeed, the sorting order has changed, but that is an implementation detail that should not be relied upon anyway, because: | If two members compare as equal, their relative order in the | sorted array is undefined. That's already documented for all? other sorting functions, but has been forgotten for array_multisort(). Adding a note to the changelog or migration guide regarding a behavioral change of undefined behavior wouldn't make sense (the behavior is still undefined). ------------------------------------------------------------------------ [2016-10-07 21:21:11] me at evertpot dot com Description: ------------ Hey guys, I noticed one of my unittests failing on PHP 7.1. Took me a bit to figure out what was going on, but ended up figuring out that if you sort-by-callback, PHP 7.1 has a different order. The use-case might sound a bit weird, and I'm certainly not suggesting that this is a bug. I merely wanted to suggest that maybe this might be added to the "Backwards compatibility changed" document. Test script: --------------- https://3v4l.org/DWujs <?php $foo = [1,1]; $bar = [ function() use (&$k) { echo "first!"; }, function() use (&$k) { echo "second!"; }, ]; array_multisort($foo, SORT_NUMERIC, $bar); $bar[0](); ?> ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=73267&edit=1

« previous php.doc.bugs (#14026) next »