C'est le bordayle

On en cause depuis quelques jours avec l’ami JcDenis et il faut dire qu’avoir trois possibilités différentes d’utiliser des éléments de formulaire dans Clearbricks c’est un peu too much!

Pour la petite histoire, la première classe, dans common/lib.form.php est celle utilisée depuis toujours avec ses avantages (appels statiques) et ses inconvénients (longue liste d’arguments dont il faut « deviner » l’usage) ; voyez un exemple :

echo
'<p><label for="user_ui_theme" class="classic">' . __('Theme:') . '</label>' . ' ' .
form::combo('user_ui_theme', $theme_combo, $user_ui_theme) . '</p>' ;

La seconde; dans common/lib.forms.php, est une tentative de ma part de mettre un peu de souplesse dans les arguments, en utilisant cette fois-ci un tableau clé-valeur. C’est mieux, mais ça reste assez lourd à écrire puisqu’il faut nommer tous les éléments fournis ; elle est disponible depuis pas loin d’un an mais jusqu’alors elle n’a jamais été mise en œuvre, que je sache, dans Dotclear ou dans un plugin. Je pense qu’elle va sauter dans la prochaine release 2.22 de Dotclear !

La troisième, dans html.form/*, que j’ai codée d’une autre manière il y a quelques mois, utilise copieusement les fonctions magiques et le chaînage, c’est beaucoup plus facile à lire mais peut-être pas à écrire si on aime pas cette forme d’usage. Voyez un exemple d’utilisation :

$label = (new formLabel(__('Sort:'), formLabel::OUTSIDE_LABEL_BEFORE, 'order'))
    ->class('ib');

$select = (new formSelect('order'))
    ->default($this->filters['order']->value)
    ->items($this->filters['order']->options);

echo sprintf(
    '<p>%s</p>',
    $label->render($select->render())
);

Je ne sais pas s’il existe une façon idéale de coder ce genre de bibliothèque et je pense que pour le futur on va conserver la 1re et 3e forme, en faisant en sorte que la 1re ne soit qu’un proxy (intermédiaire) vers la 3e pour conserver la compatibilité avec le code existant (Dotclear et plugins).

Par contre, le jour où PHP 8 sera requis, on peut imaginer que ça arrive dans quelques années, alors il sera plus simple d’utiliser la forme historique puisque l’usage d’argument nommé sera possible \o/

Deux questions :

  1. Est-ce que vous avez déjà utilisé la classe forms:: avec les arguments dans un tableau clé-valeur dans vos développements ? Essentiellement pour savoir si je casse des choses ou pas en la virant dans la prochaine 2.22.

  2. Quelle est la forme d’écriture que vous préférez quand vous codez en PHP : les appels de fonctions statiques ou les appels de fonctions chaînées ?

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/15306

Haut de page