If we really want an integer at all price we just can use a simple (int) cast. 
That’s AFAIK not the point of this RFC.

And at that point where we can add a default as second parameter, we also just 
can use NULL with ??. The latter is at the same time more powerful and less 
restrictive.

Also, with a second parameter, we don’t have any possibility to check if the 
conversion was successful or if the fallback was used.

Bob

> Am 22.10.2014 um 14:49 schrieb Dmitry Stogov <dmi...@zend.com>:
> 
> for me it's weird that to_int() that must return "int" may return not "int".
> NULL with ?? seems better than FALSE :)
> 
> but if we talk about safety, we should be able to relay on to_int() return 
> value without additional checks.
> 
> Thanks. Dmitry.
> 
> On Wed, Oct 22, 2014 at 4:35 PM, Weinand Bob <bobw...@hotmail.com 
> <mailto:bobw...@hotmail.com>> wrote:
> So, what exactly changes here if we have a second parameter or just return 
> null by default?
> It doesn’t make any difference, it’s just another way to write it:
> 
> to_int($a, $default)
> or
> to_int($a) ?? $default
> 
> Also, if you want exceptions, you always can wrap a userland function around 
> it — but I’d rather not wrap an userland function around something throwing 
> an exception… inefficient and weird.
> 
> Thanks,
> Bob
> 
> > Am 22.10.2014 um 12:27 schrieb Dmitry Stogov <dmi...@zend.com 
> > <mailto:dmi...@zend.com>>:
> >
> > "null" or "false" return value would make these functions not really
> > useful, because they won't guarantee to return desired type.
> >
> > printf("%d\n", to_int("abcd")); // will print 0
> >
> > The only reliable option to support wrong input is exceptions.
> > On the  other hand, exceptions maybe difficult to use or inefficient.
> > We may avoid exceptions throwing, if provide a default value:
> >
> > function to_int(mixed $a , int $default_value = null): int;
> > function to_double(mixed $a , double $default_value = null): double;
> > function to_string(mixed $a, string $default_value = null): string;
> >
> > Thanks. Dmitry.
> >
> > On Wed, Oct 22, 2014 at 12:37 PM, Bob Weinand <bobw...@hotmail.com 
> > <mailto:bobw...@hotmail.com>> wrote:
> >
> >> I know we have that already discussed a lot now, but I’d like to expose my
> >> points on the return value here:
> >>
> >> I imagine code like (supposing that we ever will have scalar typehints):
> >>
> >> function acceptsInt (int $i = null) {
> >>    if ($i === null) {
> >>        $i = 2 /* default value */;
> >>    }
> >>    /* do something with $i */
> >> }
> >>
> >> When we return false:
> >> acceptInt(($tmp = to_int($_GET["userinput"])) === false ? null : $tmp);
> >>
> >> When we throw an exception:
> >> try {
> >>    acceptInt(to_int($_GET["userinput"]));
> >> } catch (CastingException $e) {
> >>    acceptInt(null);
> >> }
> >>
> >> When we just return null:
> >> acceptInt(to_int($_GET["userinput"]));
> >>
> >> Also, when we want to pass a default value defined outside of the
> >> function, it’s a lot easier now with the coalesce operator:
> >> acceptInt(to_int($_GET["userinput“]) ?? 2 /* default value */);
> >>
> >>
> >> Also, independently of possible scalar typehints:
> >>
> >> Generally exceptions are also a bad idea as the casts probably will be
> >> used on external input and exceptions are **not** a way to handle malformed
> >> user input. Really not.
> >> Furthermore, false is a bad idea in the same sense (if we get scalar type
> >> hints once), because people then might just catch the EngineException…
> >>
> >> Also, null means "no value"; that’s exactly what we need. If the
> >> to_{type}() functions cannot return a meaningful value, just return "no
> >> value", that means null. And not false, which is a real value.
> >>
> >> That’s why I strongly feel that null is the only true thing to return here.
> >>
> >> Thanks,
> >> Bob
> >>
> >>> Am 21.10.2014 um 00:57 schrieb Andrea Faulds <a...@ajf.me 
> >>> <mailto:a...@ajf.me>>:
> >>>
> >>> Good evening,
> >>>
> >>> I am presenting a new RFC to add a set of three functions to do
> >> validated casts for scalar types:
> >>>
> >>> https://wiki.php.net/rfc/safe_cast <https://wiki.php.net/rfc/safe_cast>
> >>>
> >>> Please read it.
> >>>
> >>> Thanks!
> >>> --
> >>> Andrea Faulds
> >>> http://ajf.me/ <http://ajf.me/>

Reply via email to