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> 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>:
> >
> > "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>
> 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>:
> >>>
> >>> 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
> >>>
> >>> Please read it.
> >>>
> >>> Thanks!
> >>> --
> >>> Andrea Faulds
> >>> http://ajf.me/
>

Reply via email to