Premier truc sur lequel j’ai tilté, en voyant la doc de migration : le typage des valeurs de retour des fonctions et accessoirement celui des arguments.
Je me demande si le chantier que j’avais en tête pour Clearbricks ne serait pas l’occasion de mettre de l’ordre de ce côté ; dommage toutefois que le type mixed
ne soit pas disponible avant la version 8 — cela dit est-ce que c’est réellement un problème ou signe d’un code mal construit ? Vaste débat !
Le type de retour void
est également manquant jusqu’à la version 7.1, dommage.
Par contre je pense qu’on est pas encore mûr pour un type strict avec ça en début de fichier :
<?php
declare(strict_types=1);
…
Accessoirement l’opérateur « Null coalescent (??) » va permettre de simplifier un peu quelques lignes de code, surtout du côté de la gestion des formulaires dans Dotclear (et dans quelques uns de mes plugins) :
<?php
// Récupére la valeur de $_GET['utilisateur'] retourne 'aucun'
// s'il n'existe pas.
$identifiant = $_GET['utilisateur'] ?? 'aucun';
// Ceci est équivalent à :
$identifiant = isset($_GET['utilisateur']) ? $_GET['utilisateur'] : 'aucun';
// L'opérateur permet de faire du chaînage : Ceci va retourner la première
// valeur définie respectivement dans $_GET['utilisateur'], $_POST['utilisateur']
// et 'aucun'.
$identifiant = $_GET['utilisateur'] ?? $_POST['utilisateur'] ?? 'aucun';
Y’a du taf…
1 De Bernard -
J’ai pô tout compris mais je me demande si le typage est “obligatoire”… Ex: mixed comme type de retour est souvent utilisé => objet ou array
Quant au taf, certes il y en aura. Je regardais par ex la classe form de Clearbricks, admirant les astuces trouvées pour construire les attributs en fonction de ceux permis par la norme. Avec une interrogation, cependant, à propos de la place de ‘required’ parmi les attributs communs (avant le dernier “autocomplete”) qui oblige à bien faire attention à la valeur et l’ordre des arguments passés à une fonction.
Ne serait-ce que reprendre cette partie en imaginant des astuces permettant à la fois de se conformer aux normes établies —toujours en évolution, ainsi que l’interprétation quant à la valeur donnée à un attribut, tout en permettant une utilisation relativement simple/facile de chaque fonction, rien que ça, c’est déjà, amha, un challenge ;-)
2 De Franck -
À propos des attributs des différents champs fournis par la bibliothèque
form
de Clearbricks, j’ai ajouté, il y a quelques années, la possibilité de fournir les paramètres optionnels sous forme de tableau clé → valeur, ce qui permet de s’affranchir de l’ordre et de ne fournir que ceux réellement indispensables ; exemple avecform::combo
où le 3e argument peut-être ce genre de tableau :Le typage « fort » n’est pas obligatoire avec PHP, mais ça reste une bonne pratique de développement qui peut permettre d’éviter quelques bourdes ;-)
3 De Franck -
D’ailleurs j’en avais un peu causé dans ce billet.
4 De Bernard -
Oui j’avais remarqué $defaut as array et la fonction qui extrait les infos. Pour d’autres types ça peut être $size (date…), $checked (checkbox) ou $min(number)…
Je suppose aussi que cela dépend de l’ordre des arguments, du type $default (si existe)…
Ça impose quand même de bien inspecter l’ordre et la valeur des arguments envoyés à la fonction utilisée afin de bien l’exploiter et je suppose qu’il doit être difficile de modifier complètement les processus sans risquer de casser les utilisations antérieures via les plugs, par ex.
5 De Bernard -
J’avais constaté cela parce que j’ai essayé de construire un plug permettrait de construire des champs d’un formulaire — ou tout au moins de proposer les lignes de code le permettant…
J’ai plus ou moins réussi à générer un array des attributs (donc arguments) à envoyer (avec l’ordre à respecter / méthodes class form) mais je me suis arrêté après plusieurs pbs non résolus… pour l’instant.
J’envisage des solutions qui pourraient être, par ex, un classe qui étendrait la classe form… Mébon, chuis pas rendu ;)
6 De Franck -
Aucun besoin de respecter l’ordre des arguments optionnels si tu utilises le tableau clé-valeur, c’est tout l’intérêt sans compter que ceux pas utiles n’ont pas besoin d’y figurer.