Req #67860 [Opn]: Throw an "acceptable" exception

From: Date: Tue, 19 Aug 2014 19:52:02 +0000
Subject: Req #67860 [Opn]: Throw an "acceptable" exception
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-187189@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=67860&edit=1 ID: 67860 User updated by: david dot proweb at gmail dot com Reported by: david dot proweb at gmail dot com Summary: Throw an "acceptable" exception Status: Open Type: Feature/Change Request Package: *General Issues Operating System: Irrelevant PHP Version: Irrelevant Block user comment: N Private report: N New Comment: Your example can handle that, fine. But imagine that: I'm developing a framework, and it have a method that return current URL, but check if it is secure too (I don't know what user will do with that), but, even if not, the execution will works normally (user need check that, or I need to develop a method that check it "manually"). With this option, I can thrown a casual exception, but not fatal. User can check that or just ignore. It'll depends if user really want to capture this exception. Supposing that he is just logging user URL, for instance. $log->url = Framework::getCurrentUrl(); $log->save(); In this case, I not need capture the exception, I just not need to check security on URL. Now, if user need to avoid bad URLs, I can do that: try { $user->url = Framework::getCurrentUrl(); } catch(BadURL_Exception $e) { echo "Sorry, your URL is insecure."; return false; } To uncaptured exception, PHP can show a notice error, that can be hidden on error_reporting() or INI; Previous Comments: ------------------------------------------------------------------------ [2014-08-19 19:34:56] salathe@php.net The described behaviour can already be done. <?php set_error_handler(function ($errno, $errstr, $errfile, $errline) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); }); try { echo $variable; } catch (Exception $e) { echo "D'oh! " . $e->getMessage(); } ?> Outputs: D'oh! Undefined variable: variable Alternatively, you could always write sensible code that doesn't raise notices. ------------------------------------------------------------------------ [2014-08-19 01:56:05] david dot proweb at gmail dot com Actually it would make errors in a casual exception, so that I could capture it in a more reliable manner. $variable = [1, 2, 3]; echo $variable; // Notice: Array to string conversion. How I can capture that? (In this case, I could avoid it by checking if the variable is compatible, but it is only an example.) With the feature, I could do: try { echo $variable; } catch(Exception $e) { if(strpos($e->getMessage(), "Array to string conversion")) { echo "Check option user_type, it accept only string."; } } ------------------------------------------------------------------------ [2014-08-19 01:49:21] requinix@php.net If you don't want to deal with exceptions then don't use them in your code. ------------------------------------------------------------------------ [2014-08-19 01:13:31] david dot proweb at gmail dot com Description: ------------ Imagine that you do ($a / $b), but $b is zero. So you will receives "Warning: Division by zero.". You can avoid that by doing @($a / $b), something like that. But imagine if PHP can thrown an exception that not need be captured. It is: you can, optionally, capture that, but if not, will only thrown a notice, instead of warning. // Supposing that it is the PHP division constructor: function php_div($a, $b) { if($b === 0) { throw casual new Exception("Division by zero."); } return $a / $b; } // So if I do: 5 / 0; // Notice: Division by zero. // But I can do: try { 5 / 0; } catch(Exception $e) { ... } // Avoid notice. // Or even: @(5 / 0); // Avoid casual Exception. -- User can throw casual exceptions too. For instance: function name_fix($name) { ... if(name_uncommon($name)) { throw casual new Exception("This name is uncommon."); } ... return $name_fixed; } echo name_fix("David"); // David echo name_fix("Hakuna Matata"); // Hakuna Matata + Notice // When you capture that, statement will be blocked. try { echo name_fix("Hakuna Matata"); } catch(Exception $e) { echo "The Hakuna Matata is so uncommon."; } // -> The Hakuna Matata is so uncommon. (not echo name, not notice) -- Exception need a new property like boolean $isCasual ($e->isCasual()). -- Note: apply it to "division by zero" is only to examplify my feature request. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=67860&edit=1

« previous php.bugs (#187189) next »