szepeviktor / phpstan-wordpress

WordPress extensions for PHPStan ⛏️
https://packagist.org/packages/szepeviktor/phpstan-wordpress
MIT License
267 stars 26 forks source link

array_map callable not accepted #92

Closed MocioF closed 2 years ago

MocioF commented 2 years ago

Writing a class for my plugin, I used this code to sanitize input:

$new_input['endpoints'] = array_map( 'esc_url_raw', $input['endpoints'], $protocols = array( 'https' ) );

where $input['endpoints'] is an array.

PHPStan seems not to see esc_url_raw as a callable function, and says:

Parameter #1 $callback of function array_map expects (callable(string, 'https'): mixed)|null, 'esc_url_raw' given.

I am not sure if this is related to stubs, or it is a syntax problem.

szepeviktor commented 2 years ago

Hello @MocioF! 👋 Thank you for this issue.

PHPStan is an tool for OOP. It does not recognize a global function as a callable.

szepeviktor commented 2 years ago

No! I was wrong. Recently it does support that. https://phpstan.org/r/2d4c20b6-4b7f-4511-a837-18127e64d7f3 What version of PHPStan do you have?

szepeviktor commented 2 years ago

Got it!

array_map( 'esc_url_raw', $input['endpoints'], $protocols = array( array( 'https' ) ) )

...actually there must be as many array( 'https' )-s as endpoints.

MocioF commented 2 years ago

I will try, but I am not sure the problem is this one. https://phpstan.org/r/1921d0e3-e3b7-4d9e-8e96-968a9638f2b2

The problem in my code (a class in a wordpress plugin) is with parameter #1 of array_map. It seems that 'esc_url_raw' is not seen as a callable.

I got this problem in activator class; could the issue been related to this code is run before init? (I don't know exactly how phpstan discovers symbols

szepeviktor commented 2 years ago

The cause of the problem is that esc_url_raw's second parameter is an array, not a string. https://developer.wordpress.org/reference/functions/esc_url_raw/