Doc #70050 [Opn]: set_exception_handler receives non-exception objects

From: Date: Mon, 13 Jul 2015 07:15:46 +0000
Subject: Doc #70050 [Opn]: set_exception_handler receives non-exception objects
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-12514@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=70050&edit=1 ID: 70050 Updated by: laruence@php.net Reported by: mfischer@php.net Summary: set_exception_handler receives non-exception objects Status: Open Type: Documentation Problem Package: *General Issues Operating System: Ubuntu 14.04.2 LTS PHP Version: 7.0.0beta1 Block user comment: N Private report: N New Comment: Actually, I am kindof understand this problem. and maybe we should do some improvements. that is, if the exception be throw is not an compatible exception type of exception_handler. then the exception handler should not be called. actually, this problem is also exists in php5, like <?php set_exception_handler( function (ExceptionA $e) { var_dump('yodo'); } ); class exceptionA extends exception{}; throw new Exception("xxx"); Previous Comments: ------------------------------------------------------------------------ [2015-07-12 11:03:05] mfischer@php.net > So what you're saying is that we need to make sure all of that documentation gets updated > to reflect the new Throwable stuff, right? No, I'm saying there's a BC problem. >> everything which is thrown should be of type \Exception > But... you already know this won't be the case: you voted in favor of the engine > exceptions RFC. I don't see the relevancy here. But since you insist on this point: I voted against introducing a BaseException. TBH I forgot about this RFC and how I voted and was kind of independently hit by this issue, which to no-surprise matches how I voted and validates my past choice. thanks, - Markus ------------------------------------------------------------------------ [2015-07-12 10:20:26] requinix@php.net So what you're saying is that we need to make sure all of that documentation gets updated to reflect the new Throwable stuff, right? >everything which is thrown should be of type \Exception But... you already know this won't be the case: you voted in favor of the engine exceptions RFC. Which clearly said that there will be a hierarchy of exceptions above Exception. And there was all the discussion about this on the internals list. ------------------------------------------------------------------------ [2015-07-12 10:11:57] mfischer@php.net Description: ------------ A callable set with "set_exception_handler" receives objects which are not of type Exception. Why is the "Exception" in the example script typehinted? Why not, the documentation states: "This handler function needs to accept one parameter, which will be the exception object that was thrown." Which is not true anymore. I welcome "Fatal error" being turned into something which is handleable, but this seems like a BC break and IMHO everything which is thrown should be of type \Exception . Test script: --------------- <?php set_exception_handler( function (Exception $e) { var_dump('yodo'); } ); Foo::bar; Expected result: ---------------- The handler should receive something which is an "Exception", not an "Error" object. Actual result: -------------- $ php test.php Fatal error: Uncaught TypeError: Argument 1 passed to {closure}() must be an instance of Exception, instance of Error given in /vagrant/api.swat.io/test.php:3 Stack trace: #0 [internal function]: {closure}(Object(Error)) #1 {main} thrown in /vagrant/api.swat.io/test.php on line 3 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=70050&edit=1

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