Hi Mike

Thanks for your feedback!

Your solution works well and it's true that PHP would do just fine without 
accepting this RFC.
However I do think this RFC makes sense for a few reasons:

* I think that most people would expect some of the examples (especially the 
arrow function) to be valid PHP code
* Adding a throwException function will unnecessarily fragment your codebase 
into throw statements and calls to that function
* It's not as static analysis friendly
* The patch has very low complexity

I agree that some languages do well with returning errors instead of throwing 
them. I personally don't think it's a good fit for PHP because PHP can't 
enforce you to handle these cases.

Regards

On 22.03.20, 19:14, "Mike Schinkel" <m...@newclarity.net> wrote:

    > On Mar 22, 2020, at 1:16 PM, Dan Ackroyd <dan...@basereality.com> wrote:
    > 
    > On Sun, 22 Mar 2020 at 16:17, Ilija Tovilo <ilija.tov...@me.com> wrote:
    >> 
    >> Due to the modest feedback I’d like to move the throw expression RFC to 
“under discussion”.
    >> 
    >> https://wiki.php.net/rfc/throw_expression
    >> 
    > 
    > Regarding the example:
    > 
    > $condition || throw new Exception('$condition must be truthy')
    >  && $condition2 || throw new Exception('$condition2 must be truthy');
    > 
    > The "Deprecate left-associative ternary operator"* RFC made it so that
    > parentheses are required when ternary operators are nested in
    > complicated statements.
    > 
    > Would a similar requirement for parentheses around complicated throw
    > expressions be a suitable solution to avoid people being surprised by
    > the behaviour?
    > 
    
    Why can't you just do this in userland code?
    
    function throwException(Exception $exception) {
        throw $exception;
    }
    
    $callable = fn() => throwException( new Exception() );
    
    // $value is non-nullable.
    $value = $nullableValue ?? throwException( new InvalidArgumentException() 
); 
    
    // $value is truthy.
    $value = $falsableValue ?: throwException( new InvalidArgumentException() );
    
    // $value is only set if the array is not empty.
    $value = !empty($array)
        ? reset($array)
        : throwException( new InvalidArgumentException() );
    
    
    -Mike
    P.S. I am probably in the vast minority on this list but I would like to 
see fewer places that throw exceptions, not more. 
    
    I want to deal with errors where they happen, not throw exceptions or have 
to catch them as I have found that I can write much more robust and easier to 
read code when I write without using exceptions. I came to this realization 
because of learning that Go does not endorse exceptions and then I learned why 
they do not which strongly resonated with me. After that, I finally felt 
comfortable saying that "Exceptions seemed like a good idea at the time."
    
    I now have a whole slew of classes who only purpose is to wrap PHP 
functions and classes that throw exceptions so I can call them w/o having to 
use try{}catch{}. Instead I use an if() afterwards to check and then handle it 
if there was an error.
    
    One particularizing problematic exception in PHP is with the DataTime 
class. I have found it effectively impossible to create a class that extends 
DateTime without having the potential for an exception to be thrown (unless 
someone knows a way that I do not?)  The potential is actually hypothetical, 
but PhpStorm nonetheless still complains that I have not handled exceptions 
when using that child class.

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to