Bug #55416 [Ana]: array_map() throws PHP warning if the callback throws an exception

From: Date: Tue, 06 Jan 2015 00:29:07 +0000
Subject: Bug #55416 [Ana]: array_map() throws PHP warning if the callback throws an exception
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-189670@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=55416&edit=1 ID: 55416 Updated by: levim@php.net Reported by: roan dot kattouw at gmail dot com Summary: array_map() throws PHP warning if the callback throws an exception Status: Analyzed Type: Bug Package: Arrays related Operating System: Ubuntu Natty PHP Version: 5.4.0alpha3 Assigned To: levim Block user comment: N Private report: N New Comment: Note that this same issue happens for array_reduce and array_filter, but not array_walk. Previous Comments: ------------------------------------------------------------------------ [2014-10-30 20:50:29] tomasz at kowalczyk dot cc Unfortunately I have the same problem on PHP 5.5.16 from Ondrej's PPA (Ubuntu 14.04). This is an inconsistent behavior as other functions like array_walk() or array_reduce() don't do that. ------------------------------------------------------------------------ [2012-02-12 16:15:43] harvey dot robin at gmail dot com I've just come across this too and I'm really surprised at this inconsistent behavior, for me the question isn't "what kind of situation needs throw a exception in map function" but "why would the map function behave differently to any other situation". If you change array_map to array_walk in the original example then the exception propagates upward, as expected. At the very least, I'd expect to see a note on the PHP manual page warning users that exceptions work differently for the callback parameter to array_walk. ------------------------------------------------------------------------ [2011-08-16 16:20:17] mah at everybody dot org http://www.mediawiki.org/wiki/Special:Code/MediaWiki/94433 has Roan's actual use case. ------------------------------------------------------------------------ [2011-08-15 09:35:40] roan dot kattouw at gmail dot com Basically what I'm doing is implode("\n", array_map('readStyleFile', $files) where $files is an array of file names, and readStyleFile() can throw an exception if something is wrong (in this case it's if the file doesn't exist, but other cases are imaginable). This exception then propagates up a few levels and is caught and handled. Throwing an exception from inside the map callback works just fine: it stops the callback, stops array_map(), propagates up to the caller of array_map(), then works its way up the call stack like any other exception. The only issue is that warning that won't go away. ------------------------------------------------------------------------ [2011-08-15 08:54:02] laruence@php.net I was wondering what kind of situation needs throw a exception in map function? and why doing that? thanks ------------------------------------------------------------------------ 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=55416 -- Edit this bug report at https://bugs.php.net/bug.php?id=55416&edit=1

« previous php.bugs (#189670) next »