Re: [RFC] Nullable Casting

From: Date: Wed, 10 Apr 2019 14:40:18 +0000
Subject: Re: [RFC] Nullable Casting
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-105208@lists.php.net to get a copy of this message
On Wed, Apr 10, 2019 at 12:52 PM Nikita Popov <nikita.ppv@gmail.com> wrote: > > I'm a bit concerned that there are two possible semantics for what (?int) > does: > > 1. What I would intuitively expect: A fallible integer cast. I.e. try to > cast to integer and if not possible return null. So (?int) "foobar" becomes > null rather than 0. > 2. What this RFC proposes: A normal integer cast that leaves null alone. > > Both behaviors make sense to me generally ... and if there are two ways to > interpret a piece of syntax, I'd say the syntax is not explicit enough. The syntax mirrors nullable type declarations, but the thing is implicit and explicit conversions don't always behave the same today: ```php <?php declare(strict_types=0); // weak mode error_reporting(-1); $non_numeric_string = "foobar"; var_dump(array_slice([1,2,3], $non_numeric_string, null, true)); // Warning, then prints NULL var_dump(array_slice([1,2,3], 0, $non_numeric_string, true)); // prints array(0) { } var_dump(mb_substr("abc", $non_numeric_string, null, "UTF-8")); // Warning, then prints NULL var_dump(mb_substr("abc", 0, $non_numeric_string, "UTF-8")); // Warning, then prints NULL var_dump(+$non_numeric_string); // Warning, then prints int(0) // (I can't think of a nullable equivalent for unary +) (function (int $x) { var_dump($x); })($non_numeric_string); // TypeError (function (?int $x) { var_dump($x); })($non_numeric_string); // TypeError var_dump((function ($x): int { return $x; })($non_numeric_string)); // TypeError var_dump((function ($x): ?int { return $x; })($non_numeric_string)); // TypeError var_dump((int) $non_numeric_string); // prints int(0) var_dump((?int) $non_numeric_string); // ...what would you expect? ``` -- Guilliam Xavier

« previous php.internals (#105208) next »