On 21-10-19 19:19, Mark Randall wrote: > On 21/10/2019 17:02, Rowan Tommins wrote: >> - They immediately jump control out of the current frame of execution. >> Unless you put a separate "try-catch" around every line, there is no >> "acknowledge and run next line". > > I've been toying with the idea of: > > $x = tryval fopen('missing.txt', 'r'), > FileException => null; > > if ($x === null) { > die('File could not be opened.'); > } >
Or maybe introduce a try() function that can wrap calls. Since most - if not all - functions would throw a single type of exception, the following would catch that exception and return null in stead: $x = try(fopen('missing.txt', 'r')) An optional argument could be used to return a different error value: $x = try(fopen('missing.txt', 'r'), false) I guess that would cover most use cases and make it easier for people to accept an RFC on this subject. For cases where a function can throw multiple exceptions, the syntax could even be extended to allow this: $x = try(fopen('missing.txt', 'r'), [FileException => false]) Here, try() would swallow only FileException, other exceptions are still thrown. I'm not sure if this construct is worth introducing though, the difference compared to a proper try / catch is much smaller. A try() function could also help provide a migration path to PHP 8. It may be possible to write an automatic code fixer that wraps any function calls that need it in a try() to retain old behavior. Backporting try() to PHP 5.x would allow the same code to run on both PHP 5 and 8. Regards, Dik Takken -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php