The ... syntax produces a Closure bound at the point of creation, which means a private method can be handed out and will still work wherever it is called.
final class Importer
{
private function parse(string $line): array { /* ... */ }
public function parser(): Closure
{
return $this->parse(...); // works
// return [$this, 'parse']; // fails at call time
}
}
array_map($importer->parser(), $lines);
The array form defers the visibility check to the call site, so handing out [$this, 'privateMethod'] produces an error somewhere else entirely with a message about the wrong class. Binding at creation is the substantive difference from every previous callable syntax and it is what makes this usable for exposing a private method as a strategy — which is a legitimate pattern that had no clean expression before.