Principes pour le typage des arguments
Le commit sur filtre_explode_dist
et filtre_implode_dist
m'amène à m'interroger sur ce qu'on peut typer ou pas et comment, sur les fonctions utilisées comme filtres SPIP en particulier, mais aussi les autres. Par ailleurs en PHP8.1, tout ce qui déroge au typage déclaré des arguments provoquera une erreur PHP.
En php, la déclaration de explode est
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
. On pourrait donc typer : string
le retour de filtre_explode_dist
.
Actuellement pour filtre_explode_dist
, les arguments $a
et $b
ne sont pas déclarés typés, et lors de l'appel de explode
, $a
est casté en string, mais pas $b
.
Si le filtre n'est pas appliqué dans les bonnes conditions, $b
pourra donc produire une erreur php dans le corps de la fonction filtre à l'appel de explode
, mais pas $a
. On pourrait donc choisir de caster $b lors de l'appel de explode aussi. Ainsi, pas d'erreur PHP, mais risque de ne pas détecter un comportement non désiré.
On pourrait aussi choisir de ne pas caster les arguments $a et $b lors de l'appel de explode, mais de les typer dans la déclaration du filtre. Et alors, en cas de conditions non satisfaites, c'est lors de l'appel dans le squelette qu'une erreur PHP sera signalée. C'est potentiellement plus précis pour aider le webmestre à corriger, mais pour que ça soit utilisable, il faudrait que SPIP récupérant l'erreur fasse une traduction vers le contexte SPIP : chemin du squelette, n° de ligne ou nom de la boucle englobante.
D'où l'interrogation : quelle sont les réflexions ou recommandations en matière de typage des fonctions utilisées comme filtres ?
(Et y a t il des éléments de réponses pour les fonctions non utilisées comme filtres ?)