Re: PHP7 scalar type hint error bug?
| From: | Nikita Popov | Date: | Thu, 14 May 2015 09:51:23 +0000 |
| Subject: | Re: PHP7 scalar type hint error bug? | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-86216@lists.php.net to get a copy of this message | ||
On Thu, May 14, 2015 at 11:46 AM, Yasuo Ohgaki <yohgaki@ohgaki.net> wrote:
> Hi Anthony,
>
> I'm experimenting type hints to write how it could be useful.
>
> http://3v4l.org/nhI61
>
> I thought too large value error in weak mode is E_RECOVERABLE_ERROR,
> but it's not. The RFC (
> https://wiki.php.net/rfc/scalar_type_hints_v5 )
> does not
> state how it behaves for too large values.
>
> E_ERROR is too severe for too large values. Behavior like this
>
> http://3v4l.org/avsW4
>
> is preferred because it's much easier to handle errors nicely.
>
> E_ERROR is too severe even for strict_types=1, IMHO, because
> user does not have chance to handle errors nicely at all.
>
> http://3v4l.org/aEpP8
>
> Is this behavior is agreed behavior by discussion or a bug?
>
> In the RFC
>
>
> https://wiki.php.net/rfc/scalar_type_hints_v5#behaviour_of_strict_type_checks
> it says
>
> ---------------------
> Behaviour of strict type checks
>
> A strictly type-checked call to an extension or built-in PHP function
> changes the behaviour of zend_parse_parameters. In particular, it will
> produceE_RECOVERABLE_ERROR rather than E_WARNING on failure, and it follows
> strict type checking rules for scalar typed parameters, rather than the
> traditional weak type checking rules.
> ---------------------
>
> It seems intended error level is E_WARNING/E_RECOVERABLE_ERROR according to
> the RFC.
>
The output is a bit confusing: This will actually throw a TypeException,
it's just currently rendered like a fatal error (known issue, will have to
be resolved at some point). If you wrap your code with a catch
(TypeException $e) you'll be able to handle argument type errors - this
includes both errors for user typehints and for internal function types.
Nikita