Re: Introduce the abiltiy to use the first-call-callable syntax on non-static methods, statically
| From: | Dan Ackroyd | Date: | Mon, 23 Jan 2023 21:52:48 +0000 |
| Subject: | Re: Introduce the abiltiy to use the first-call-callable syntax on non-static methods, statically | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-119408@lists.php.net to get a copy of this message | ||
On Mon, 23 Jan 2023 at 20:51, Larry Garfield <larry@garfieldtech.com> wrote:
>
> On Mon, Jan 23, 2023, at 12:32 PM, Dan Ackroyd wrote:
>
> >
> > $fnConstructor = Closure::fromClassConstructor(Zoq::class);
> > // signature of $fnConstructor is the same as
function(Fot $fot):
> > Zoq
> >
> > Or for individual methods:
> >
> > $fnMethod = Closure::fromClassMethod(Zoq::class, 'Pik');
> > // signature of $fnMethod is the same as `function(Zoq $zoq, string
> > $zebranky): Frungy`
>
> I don't think that actually helps. If you have the object already,
Neither of new functions I was suggesting have the object already.
Only the type.
> If you do not have the object already, then we run back into the issue
> I pointed out before where we need to differentiate a bindable from
> needs-binding callable,
That's not what I suggesting.
Danack wrote:
>
> $fnConstructor = Closure::fromClassConstructor(Zoq::class);
> signature of $fnConstructor is the same as function(Fot $fot):
> Zoq
That doesn't need a binding at all.
Danack wrote:
>
> $fnMethod = Closure::fromClassMethod(Zoq::class, 'Pik');
> signature of $fnMethod is the same as `function(Zoq $zoq, string
> $zebranky): Frungy`
First parameter is the object to be operated on. You wouldn't need to
do any binding. *magic* would happen inside the function to take care
of that.
> I think that's a prerequisite for adding any dedicated syntax
> for "make a closure that doesn't work until it gets bound".
To be clear, I don't support anything like that. As I wrote:
Danack wrote:
>
> That sounds like a complete non-starter. Adding something to the
> language that produces a closure that can't be called would be an
> instant new entry for PHPSadness.
cheers
Dan
Ack