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/>