PHP callbacks have improved a lot, but there are still places where a tiny arrow function exists only to fill in one argument later. PHP 8.6’s partial function application is meant to remove that ceremony. I can see it being genuinely useful, as long as people do not turn every call into a puzzle made of placeholders.
The accepted partial function application RFC lets ? stand for one argument that will be supplied later and ... accept zero or more remaining arguments. Something like str_replace('old', 'new', ?) produces a closure waiting for the subject. It keeps the original callable’s parameter information rather than forcing you to repeat it in an arrow function.
That should make common mapping, filtering, and pipeline code shorter without hiding the actual operation. It also supports delayed execution: supply the required values with ..., keep the returned closure, and call it when the work should happen. The important detail is that fixed argument expressions are evaluated when the partial function is created, not later when it is called.
My rule would be simple: use it when the result reads like an obvious configured function. If somebody needs to count placeholders or remember a clever argument order, write the closure out properly. PHP has finally gained a neat tool here. That does not mean every anonymous function is now a code smell.