> if your target ’type’ is `?int` and you pass an empty string, wouldn’t you expect to get `null` rather than `0` ?
I'd personally expect an `Error`, but this is not very much in line with current casting semantics. You have a point here, there is no clear answer for this edge case. Maybe before nullable casting, should be discussed throwing errors when attempting to cast a bad value, such as `(int) ""` ? I think we're getting one step closer with the string to number comparison RFC <https://wiki.php.net/rfc/string_to_number_comparison>, which suggests that `"" != "0"`. Ben On Mon, 8 Apr 2019 at 12:25, Stephen Reay <php-li...@koalephant.com> wrote: > > > On 8 Apr 2019, at 16:35, Benjamin Morel <benjamin.mo...@gmail.com> > wrote: > > > >> register_cast_function('?int', 'castToIntOrNull'); > > > > I would quite oppose such a generic implementation, as it might have > > unexpected consequences in other parts of the codebase : it's a global > > configuration set at runtime. > > > > I quite like the idea of nullable casting though, as I've come across a > few > > cases myself where this would have been useful and would have made the > code > > more concise/readable. > > > > Ben > > > > On Mon, 8 Apr 2019 at 04:55, Dan Ackroyd <dan...@basereality.com> wrote: > > > >> On Sat, 6 Apr 2019 at 08:53, Guilliam Xavier <guilliam.xav...@gmail.com > > > >> wrote: > >>> > >>> Hello internals, > >>> > >>> David and I would like to open the discussion on our joint RFC: > >>> > >>> https://wiki.php.net/rfc/nullable-casting > >>> > >>> Mainly, it would enable to use e.g. `(?int)$x` besides `(int)$x`. > >>> > >> > >> I'm guessing you don't actually have ths function getIntOrNull() in > >> your code-base? To help me understand where this would be useful, > >> could you provide some 'real-world' code where this would be useful? > >> > >> By the way, this RFC is a special case of something that could be far > >> more generic. If it was possible to register callbacks to be used when > >> casting, people could do something like this: > >> > >> function castToIntOrNull($value) > >> { > >> if ($value === null) { > >> return null; > >> } > >> > >> return (int)$int; > >> } > >> > >> register_cast_function('?int', 'castToIntOrNull'); > >> > >> $x = (?int)getIntOrNull(); > >> > >> > >>> Additionally, it was requested on the mailing list to consider adding > >>> support of nullable types to the settype() function, > >>> e.g. settype($variable, "?int") > >> > >> Someone probably needs to make an argument for it to be in core, > >> rather than just saying that it's something that could be done. > >> > >> cheers > >> Dan > >> Ack > >> > >> -- > >> PHP Internals - PHP Runtime Development Mailing List > >> To unsubscribe, visit: http://www.php.net/unsub.php > >> > >> > > I’ve come across this pattern (string variable contains a number or > nothing) myself, but it also then makes me think - if your target ’type’ is > `?int` and you pass an empty string, wouldn’t you expect to get `null` > rather than `0` ? > > > > >