> On Oct 24, 2019, at 8:50 AM, Dik Takken <d.tak...@xs4all.nl> wrote:
> However, you could also choose to leverage the new behavior of throwing
> exceptions to simplify your code. Passing the error condition to the
> caller can now be done by *not* handling the exception that is thrown, so:
> 
>  $filepath = __DIR__ . '/foobar.json';
>  if (false === ($content = file_get_contents($filepath)) ) {
>     error_log( sprintf("failed to open '%s'", $filepath ));
>     return false;
>  }
> 
> becomes:
> 
>  $content = file_get_contents($filepath)
> 
> Here we assume that the exception contains an appropriate message
> allowing us to omit generating it manually. Of course, the caller will
> have to be adjusted to handle the exception in stead of the false. An
> IDE like PHPStorm will nicely point you at the places in your code that
> need to be adjusted.

Of course you can program that way, but you eventually have to deal with the 
error, and if you don't handle it where it happens then you know less about the 
context than if you just go ahead and handle it were the error first occurred.

This is not just my opinion, but the opinion of numerous others[1-6] (yes, I 
have recently shared these links twice before.)


> One could also reason the other way around. When a function returns some
> value or false in case of an error you have to check the return value
> for practically every function call. 


Note the I am not arguing people should be required to handle errors, only that 
I (and others like me) are empowered if we want to
to handle the errors without having to try{]catch{} lots of exceptions.  And 
your try() "function" was a good way to empower us to do that.

> And we all forget to do so,
> resulting in unexpected failures. Exceptions allow us to simply use the
> return value without additional checks. Should anything go wrong calling
> the function we have plenty of options:

That assumes the developer is going to be sloppy.  Admittedly most developer 
are sloppy, myself included at times.

But I want to be able to get rid of the training wheels and be allowed to build 
robust software if I choose to do so.

> You do not have to use a wrapper. Yes, PHPStorm nicely points you at a
> possible failure point in your code, which reminds you to think about
> how to handle them.

Yes, unfortunately I know that.  :-(

Let's say that the function that I am calling is 10 levels deep in the function 
call tree.  Now I have to either have a try{}catch{} for everything that can 
throw an exception, or a @throw PHPDoc a the top of each function. But if I do 
the latter now I have to do the same in the 9th level.  And if I add @throw at 
the 9th level now I have to document at the 8th level too. And so on and so on 
all the way up to level 2.

So basically with Exceptions in PhpStorm I am forced to me deal with the 
exception either with a try{}catch{} OR I have to do it at every level of my 
code.  And it is possible to disable those warnings, but I WANT those warning 
so I don't miss an exception. I just want a way not to have most functions 
return exceptions.

So it would be much easier to just handle it once locally without the 
try{}catch{}. And if PHP were to introduce a standard error object, say 
PHP\Error, then PhpStorm could flag them as not being handled for every 
function that potentially returns one.

> You don't get that when a function returns false or
> null in case of error. 

True, but that is not what your try() "function" idea would do, as described 
above.  It would/should return either the exception object, or maybe better a 
new PHP\Error type, or SplError type.

> Since exceptions should mostly be used for situations where it is best
> to run for the emergency exit, wrapping a function call in a try / catch
> is not expected to be something done frequently.

The problem with that is the code throwing the exception makes the decision it 
is "exceptional" on behalf of the app/website, but it is really the 
app/websites responsibility to decide it is truly exceptional from the 
perspective of the app/website. It is very possible the 
app/website has a fallback for a scenario that someone who implemented a core 
PHP function believed was exceptional.

Basically, I am just asking to be put in control related to errors/exceptions 
instead of having to work around decisions other people made for me.

-Mike

[1] http://www.lighterra.com/papers/exceptionsharmful/ 
<http://www.lighterra.com/papers/exceptionsharmful/>
[2] https://sidburn.github.io/blog/2016/03/25/exceptions-are-evil 
<https://sidburn.github.io/blog/2016/03/25/exceptions-are-evil>
[3] http://xahlee.info/comp/why_i_hate_exceptions.html 
<http://xahlee.info/comp/why_i_hate_exceptions.html>
[4] https://www.joelonsoftware.com/2003/10/13/13/ 
<https://www.joelonsoftware.com/2003/10/13/13/>
[5] https://mortoray.com/2012/04/02/everything-wrong-with-exceptions/ 
<https://mortoray.com/2012/04/02/everything-wrong-with-exceptions/>
[6] https://www.atlassian.com/blog/archives/exceptions_are_bad 
<https://www.atlassian.com/blog/archives/exceptions_are_bad>



Reply via email to