Re: Reclassifying some PHP functions warning as exceptions

From: Date: Thu, 24 Oct 2019 12:32:52 +0000
Subject: Re: Reclassifying some PHP functions warning as exceptions
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-107655@lists.php.net to get a copy of this message
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

« previous php.internals (#107655) next »