Firstly, I'm not here to debate the merits or the how-to of serializing
closures.  I'm here to address the current usability issues with how it is
prevented.  The short background of what I'm doing is serializing backtraces
when errors occur so that I can better diagnose bugs my clients report.  But
when a closure is passed as a function parameter somewhere in the call tree,
things just flat out exlode with the error:

Fatal error: Exception thrown without a stack frame in Unknown on line *0*

I've gotten around the problem in the short term by catching the exception
from the serialization, but then I loose my backtrace.  It seems unfortunate
that I need to clean my backtrace before serializing it.  The error that you
get when you try to serialize a Closure right now is:

Exception: Serialization of 'Closure' is not allowed in ....php on line *13*

While I'm perfectly fine having closures not serialize, having a closure
buried in an array or object and having that error out seems like a bad
thing as well.  This gets even worse when trying to do this from within an
error handler, you lose all context of the error since throwing
exceptions/errors from within the error handler causes all sorts of bad
things to happen (Exception thrown without stack frame errors).  I certainly
wasn't expecting serialize to be the thing that was causing the issue.

Thus, would it be possible to degrade this from something as severe as an
exception to being a simple warning, or just silently ignoring it and
continuing with the serialization?  I would compare this to resource handles
for mysql connections and the like.  Those are silently ignored.

I'm open to thoughts, comments, and suggestions and would be willing to
write a patch to make whatever changes are agreed upon.

-- 
-Nathan Gordon

If the database server goes down and there is no code to hear it, does it
really go down?
<esc>:wq<CR>

Reply via email to