On 04/23/2016 08:34 PM, Marcio Almada wrote:
> hi!
>
> From: Mathieu Rochette <math...@texthtml.net>
>> Date: 2016-04-23 12:44 GMT-04:00
>> Subject: Re: [PHP-DEV][RFC] Callable Types
>>
>>
>> On 04/22/2016 06:12 AM, Marcio Almada wrote:
>>
>> Hello everyone,
>>
>> We just completed the draft for the "Callable Types" RFC. This RFC has been
>> recently mentioned during other type related threads on this mailing list,
>> so it feels to be the right time to put the proposal in context:
>>
>> The proposal is at https://wiki.php.net/rfc/callable-types
>>
>> It looks very nice overall :) and would be, imho, a great addition to PHP
>>
>>
>> I have a few comments, first about the optional arguments, the example in
>> the rfc says :
>>> // That means that foo() could call $cb and pass anything as a first
>> argument and if it would be something that is not an instance of A the call
>> would fail.
>> I don't get why foo would be declared as
>>
>> function foo(callable() $cb) { }
>>
>> instead of
>>
>> function foo(callable($any) $cb) { }
>>
>> if foo intends to call $cb with an argument.
>>
>>
>> what about optional arguments, eg:
>>
>> class Foo
>> {
>>   private $logger;
>>   public __construct(Logger $logger = null) {$this->logger = $logger;}
>>   public doSomething(callable(int $done, int $remaining, Logger = null)
>> $progressCb) {
>>     // ...
>>     for($i = 0; $i < $n; $i++) {
>>       // ...
>>       $progressCb($i, $n - $i, $this->logger);
>>     }
>>   }
>> }
>>
>> should that be supported ?
>>
>>
> Currently you can nullify or skip the Logger argument upon implementation
> of the callable. Rendering your example:
>
> https://3v4l.org/qb5QR/rfc#tabs
>
> Admittedly, the expectation for default values to work seems legit and we
> are currently discussing whether to support
> default values on callable types signatures or not (inclined to do not
> support). But honestly I haven't seen a legit use
> case when we already have the ability to satisfy the callback with a
> smaller type. Perhaps you may have one use case
> where a default value would be indispensable?
I wouldn't say it's indispensable. it's just that in the previous
example, the class Foo cannot say that the #rd argument of the callable
is either a Logger or null.
that means that giving function(int $done, int
$remaining){var_dump($remaining);} works but function(int $done, int
$remaining, Logger $logger){$logger->debug($remaining);} does
not even though it is compatible with the callable signature. and
afaikt, I cannot make a signature without a default null value or one of
the rfc about union types or nullable types

>
>
>> and last one, will instanceof supports this new syntax?
>>
>>
> Yes, please expect to see this on the next minor version of the RFC :)
great !


I've seen someone mentioning variadics so I made a few small tests, I
think those two should work (they currently don't):

https://3v4l.org/eZgR9/rfc#rfc-callable_typehint
https://3v4l.org/N7i0u/rfc#rfc-callable_typehint

and this one should not:

https://3v4l.org/fcRlT/rfc#rfc-callable_typehint


>
>
>
>> thank you
>>
>> The W.I.P patch is available for testing through http://3v4l.org under the
>> RFC tab.
>>
>> We count with your detailed feedback and insights. Let's have a nice,
>> respectful and
>> constructive conversation about the RFC and work on possible improvements!
>>
>> Thanks
>> Nikita Nefedov
>> Márcio Almada
>>
>>
>> --
>> Mathieu Rochette
>>
>>
> Cheers.
>

-- 
Mathieu Rochette

Reply via email to