"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/
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to