Hey guys!

> On 13. Apr 2023, at 16:28, Robert Landers <landers.rob...@gmail.com> wrote:
> 
> I'd be down for implementing this in a heartbeat if we
> 
> $a = Closure::fromCallable(static fn () => $this->getId());
> $b = Closure::bindMany($items); // executes `bind` on each item in the
> array, returning an array of closures
> foreach($b as $callback) {
> $callback();
> }

Personally I find it a bit inconvenient, and also: won’t in this case all the 
closure instance be created so space allocated for them?

> or something like that. My biggest thing is that there's no real way
> to save much on typing this out. Unless you are doing something fairly
> exotic, you only save a few characters. That's why I said its a lot of
> work for not much benefit. I could be totally wrong though because I,
> personally, do run into wanting this feature several times a year.

I can only tell my opinion as I also came across the same case / problem. But 
what if I do the following:

```
$items = [new Verification(“1”), new Verification(“2”))];

$ids = array_map(NotVerification::getId(…), $items); // ofc I did that so my 
fault but not allowing something to be done… I think it’s half win. But it’s 
very misleading 
```

Additionally: if I don’t have the class imported and don’t even need it, than 
it has to be. 

Essentially what we only need in the first parameter is the method name that 
should be called. 

I cannot really assess how big of a hassle it would be, but what I personally 
think that it look nice is something like this: 

```
class Verification
{
   public function __construct(private string $id) {}

   public function getId(): string
   {
       return $this->id;
   }

   public static function getIdAbs(self $instance) {
       return abs($instance->id);
   }
}

$items = [new Verification(“1”), new Verification(“2”))];

array_map($$->getId(…), $items);

array_map($$::getIdAbs(…), $items);
```

This way the class does not have to be imported. Later one might be able to add 
additional parameters even.

```
class Verification
{
   // […]

   public static function getIdAbs(self $instance, array $idMap) {
       // do something with the $idMap
       return abs($instance->id);
   }
}

// […]

array_map($$::getIdAbs(…, $idMap), $items);

```

I know this might be a little more exotic. But it is very straight forward for 
static analysis tools. And no import has to be done for classes. 

Zoltán 
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to