Beaucoup de warning / deprecated dans les fonctions de traitement de chaines

Depuis qu’on avance dans les versions PHP on découvre de plus en plus de warning/deprecated qui proviennent d’un argument null alors que le la fonction de traitement de chaine attend une string.

Par exemple, la fonction code_echappement() commence par :

function code_echappement($rempl, $source = '', $no_transform = false, $mode = null) {
	if (!strlen($rempl)) {
		return '';
	}

Ce qui provoque un warning quand $rempl vaut null.
De fait, on pourrait corriger par :

function code_echappement($rempl, $source = '', $no_transform = false, $mode = null) {
	if (!strlen((string) $rempl)) {
		return '';
	}

Mais on peut faire pleins d’autres choses comme tester le null avant de tester la longueur et c’est vrai qu’on a aucune logique un peu standardisée pour répondre à ces warnings.
Si je regarde la typographie aussi, dans Textwheel on a :

function typographie_en($t) {
...
	if (!is_null($t)) {
		# cette chaine ne peut pas exister,
                ...
		$t = str_replace(array_keys($trans), array_values($trans), $t);
                ...
	}

	return $t;

On voit bien qu’on évite d’appeler la fonction str_replace() devenue plus sensible si $t est null.
Et par contre, on renvoie $t donc null.
Si je regarde la typographie fr on ne fait pas le test et les fonctions en et fr de base sur spip ne font aucun test.

Je me demande si on devrait pas faire pour ces fonctions de manipulation de texte qui appellent régulièrement une passe qualité pour traiter ces cas de null en adoptant une réponse répétitive ?
Dans les cas précédents ne faudrait-il pas :

  • tester systématiquement le null sur l’argument chaine en entrée
  • et renvoyer une chaine vide plutôt que le null fourni en entrée ?

A vous lire.

1 « J'aime »

Hello,

Suite des actions qualité, je me suis mis à jour sur mon php-cs-fixer et j’ai découvert certaines nouvelles configurations pour « améliorer » le code, à savoir :

  • utiliser (null === $var) au lieu de (is_null($var))
  • utiliser [$var1, $var2, $var3] au lieu de list($var1, $var2, $var3])
  • utiliser le cast (int) $var au lieu de intval($var)

Je me demandais donc si ça parait intéressant, inutile ou carrément à ne pas faire.

A vous lire

1 « J'aime »