vimeo/psalm

preg_replace_callback with PREG_UNMATCHED_AS_NULL flag results in `null` elements in callback

Open

#7671 aperta il 14 feb 2022

Vedi su GitHub
 (10 commenti) (0 reazioni) (0 assegnatari)PHP (668 fork)batch import
Help wantedgood first issue

Metriche repository

Star
 (5369 star)
Metriche merge PR
 (Merge medio 3g 12h) (5 PR mergiate in 30 g)

Descrizione

The stub for preg_replace_callback() is:

https://github.com/vimeo/psalm/blob/36d5a2a83c1d7b3e2aca1cfe9e9dcc916619e962/stubs/CoreGenericFunctions.phpstub#L922-L932

With @param callable(string[]):string $callback. However if you pass the PREG_UNMATCHED_AS_NULL flag the signature will become @param callable((string|null)[]):string $callback.

I have a $m[1] === null check in my callback function and now I get the errors:

ERROR: DocblockTypeContradiction - Cannot resolve types for $m[1] - docblock-defined type string does not contain null ERROR: RedundantConditionGivenDocblockType - Docblock-defined type string for $m[1] is never null

See https://psalm.dev/r/7537bf3352

https://3v4l.org/JdUaY shows the value of $m[1] is null.

Guida contributor