On Sat, Aug 6, 2016 at 11:53 AM, Davey Shafik <da...@php.net> wrote:

> On Sat, Aug 6, 2016 at 2:34 AM, Nikita Popov <nikita....@gmail.com> wrote:
>
>> On Sat, Aug 6, 2016 at 4:26 AM, Davey Shafik <da...@php.net> wrote:
>>
>>> Hey all,
>>>
>>> I know this is a little late in the process, but it's something I've
>>> noticed while prepping some content around 7.1.
>>>
>>> This RFC: https://wiki.php.net/rfc/too_few_args
>>>
>>> Passed, and has been implemented, but I feel that throwing an `\Error`
>>> exception is a mistake. I think we should another more concrete exception
>>> class for this error:
>>>
>>> `\TooFewArgumentsError extends \Error`
>>>
>>> A use case where this may trivially occur is where you are using argument
>>> unpacking and the unpacked array is too small. Writing this, just looks
>>> bad:
>>>
>>> try {
>>>    foo(… $args);
>>> } catch (\Error $e) { }
>>>
>>> compared:
>>>
>>> try {
>>>    foo(… $args);
>>> } catch (\TooFewArgumentsError $e) { }
>>>
>>> Thoughts? Dmitry?
>>>
>>> Given the tiny change this is, and that is backwards compatible with the
>>> original RFC, I would like to add this to 7.1 for beta3.
>>>
>>> I think I can make this change myself.
>>>
>>> - Davey
>>>
>>
>> Problem: We already use TypeError for this for internal functions. If we
>> want to introduce an extra exception for this, lets use it for internal
>> functions as well. In that case we should probably go with something that
>> applies not just to too few arguments, but also to too many.
>>
>
> Are you saying that in PHP 7.0, if you call an internal function with too
> few, or too many arguments it will emit a TypeError exception?
>
> Can you provide examples? It's obviously not every function, e.g. fopen()
> emits a Warning if you forget the second arg.
>
> With that in mind, to make this BC, TooFewArguments would have to extend
> TypeError which isn't great.  Maybe, "ArgumentError" and the message will
> make it clear if it's too few or too many?
>

Forgot to mention, this is only for strict_types=1, or if zpp explicitly
opts to throw (e.g. constructors).

Nikita

Reply via email to