[PHP-DEV] [Vote] Partial Function Application v2

I hereby open the vote on Partial Function Application:

The vote will be open for a little over 2 weeks, automatically closing at 2025-12-05 T 12:00:00, UTC. (That's 2 weeks and a couple hours, just to be safe.)

--
  Larry Garfield
  larry@garfieldtech.com

On Thu, Nov 20, 2025, at 3:59 PM, Larry Garfield wrote:

I hereby open the vote on Partial Function Application:

PHP: rfc:partial_function_application_v2

The vote will be open for a little over 2 weeks, automatically closing
at 2025-12-05 T 12:00:00, UTC. (That's 2 weeks and a couple hours,
just to be safe.)

--
  Larry Garfield
  larry@garfieldtech.com

And as requested off-list, the discussion thread is here:

--Larry Garfield

On Thu, Nov 20, 2025, at 4:09 PM, Larry Garfield wrote:

On Thu, Nov 20, 2025, at 3:59 PM, Larry Garfield wrote:

I hereby open the vote on Partial Function Application:

PHP: rfc:partial_function_application_v2

The vote will be open for a little over 2 weeks, automatically closing
at 2025-12-05 T 12:00:00, UTC. (That's 2 weeks and a couple hours,
just to be safe.)

--
  Larry Garfield
  larry@garfieldtech.com

And as requested off-list, the discussion thread is here:

[RFC] Partial Function Application v2 - Externals

--Larry Garfield

The vote has now closed. The RFC is adopted unanimously 33-0-0.

Thanks, everyone! We'll get the PR merged soonish. PHP 8.6 is off to a great start. :slight_smile:

--Larry Garfield

Hi

On 11/20/25 22:59, Larry Garfield wrote:

PHP: rfc:partial_function_application_v2

As part of my work on the PFA-for-$this RFC I noticed one thing that is left undefined in the RFC text and AFAICT not currently tested with the implementation PR, but appears to “just work” is late-static binding with `static::`:

     <?php

     class P {
         public static function m(string $a): void {
             echo __METHOD__, PHP_EOL;
             var_dump($a);
         }

         public static function get() {
             return static::m(?);
         }
     }

     class C extends P {
         public static function m(string|array $b): void {
             echo __METHOD__, PHP_EOL;
             var_dump($b);
         }
     }

     P::get()(a: 'a');
     C::get()(b: []);

This correctly results in:

     P::m
     string(1) "a"
     C::m
     array(0) {
     }

being output.

Can you please make sure to include this as an Erratum within the RFC text (and also make sure it gets a proper test in the PR, including all possible OPcache variations)?

Best regards
Tim Düsterhus

On Mon, Feb 9, 2026, at 3:09 PM, Tim Düsterhus wrote:

Hi

On 11/20/25 22:59, Larry Garfield wrote:

PHP: rfc:partial_function_application_v2

As part of my work on the PFA-for-$this RFC I noticed one thing that is
left undefined in the RFC text and AFAICT not currently tested with the
implementation PR, but appears to “just work” is late-static binding
with `static::`:

     <?php

     class P {
         public static function m(string $a): void {
             echo __METHOD__, PHP_EOL;
             var_dump($a);
         }

         public static function get() {
             return static::m(?);
         }
     }

     class C extends P {
         public static function m(string|array $b): void {
             echo __METHOD__, PHP_EOL;
             var_dump($b);
         }
     }

     P::get()(a: 'a');
     C::get()(b: []);

This correctly results in:

     P::m
     string(1) "a"
     C::m
     array(0) {
     }

being output.

Can you please make sure to include this as an Erratum within the RFC
text (and also make sure it gets a proper test in the PR, including all
possible OPcache variations)?

Best regards
Tim Düsterhus

Thanks Tim, good catch. I have added an errata to that effect; Arnaud's on vacation this week but will add some tests when he returns.

--Larry Garfield