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/

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to