Page 1 sur 1

Créer une librairie de fonctions perso

Posté : 19 janv. 2008, 12:52
par Louisss
Bonjour.
J'envisage de me créer une petite librairie pour mes fonctions perso, et j'aimerais en profiter pour faire un peu le tour de la question, mais je ne trouve aucun tutoriel sur ce sujet. Voici donc mes questions :
- Quelles extensions peut-on utiliser pour un fichier librairie (.php, .lib, .dll, .com, ...) ?
- Quelle différence y-a-t'il entre ces différentes extensions, et du coup, faut-il en privilégier une en particulier (et alors laquelle et pourquoi ? ) ?
- Où vaut-il mieux placer ses fichiers librairie ?
- Y-a-t'il une différence (si oui, laquelle ? ) entre une "librairie" et une "bibliothèque" (au sens de PHP, je parle pas de commerce ou de location de bouquins ;-) ) ?

Merci d'avance

Posté : 19 janv. 2008, 14:37
par Berzemus
Concrètement, tu veux dire un fichier avec les fonctions que tu utilises souvent, pour facilement pouvoir les réutiliser dans d'autres programmes ?

Je dirais de simplement l'inclure dans chaque script que tu fais, en tant que simple fichier php.

Posté : 19 janv. 2008, 14:43
par Louisss
Oui, merci Berzemus, c'est bien ça que je veux faire. Mais mon objectif est d'en savoir plus et si possible de tout savoir sur cette question, car visiblement il y a différentes solutions possibles et j'aimerais être capable d'une part de faire le bon choix quand c'est pour moi, et aussi de donner de bons conseils quand on m'en demande.
D'où les questions que je pose dans ce post.

Posté : 19 janv. 2008, 15:13
par Berzemus
hmm.. le nec plus ultra pour la réusabilité (oh, le beau mot :D ) de sont les objets et les classes (bien conçus), avec un haut degré d'abstraction, et une indépendance totale vis-à-vis du script dans lequel ils sont employés. Mais ce niveau est tellement élevé que finalement elles ne servent plus à rien (l'exemple classique d'un interfaçage vers MySQL.. on y mets du temps, de l'amour et tout ce qu'on a de cher, pour finalement découvrir l'interface PDO).

A côté il y a les frameworks aussi (petit lien), qui offrent aussi un tas de fonctionnalités propres.

Comme je ne connais pas ton niveau, c'est dur de dire. A un débutant je dirais de ne pas le faire. Certes, on a l'impression de gagner du temps, mais du coup on ne se pousse pas à les réinventer.

A un développeur aguéri, je ne sais même plus s'ils ont de telles bibliothèques. Ca dépend aussi des projets que tu fais; s'ils sont tous semblables, s'il se succèdent rapidement.

Dans mon cas, les projets durent longtemps, 6 mois ou plus. Les fonctions et classes sont tellement taillés pour l'application spécifique, qu'ils ne sont tout simplement pas réutilisables ailleurs (mis à part une ou deux fonctions ou classes abstraites).

Plus important qu'une bibliothèque de fonctions, ce sont les bonnes pratiques, les "design patterns" (on en parle à gauche à droite sur ce forum), qui te permettent vraiment (si bien appliqués) de travailler plus rapidement et plus efficacement.

Sinon, a chacun de faire son expérience.. :wink:

Posté : 19 janv. 2008, 15:19
par Louisss
Ok Berzemus.

Donc, si je comprend bien, quand je veux me faire une librairie, je me fais un fichier du type librairie.php contenant toutes mes déclarations de fonction et c'est tout. Y'a pas plus de question à se poser, c'est bien ça ?

Posté : 19 janv. 2008, 15:43
par cf357
Pour avoir quelque chose qui fonctionne, c'est ça.
Pour avoir quelque chose d'un peu optimisé, fonctionnel et réutilisable souvent, les points sur lesquels il faut faire attention sont les suivants :

1) Nommer intelligemment tes fonctions si tu ne les utilises pas au sein de classes / namespace (spécial dédicace à php6 !)

2) Conserver un ordre logique des paramètres. Par exemple pour des fonctions ayant attrait à des tableaux :

exemple:
<?php
function arrayDisplay($array);  // on decide de toujours mettre le tableau en premeir parametre
function arrayFoo($array, $elt); // comme ici

function arrayBar($elt, $array); // => non
function arrayBar($array, elt);   // => oui
?>
3) Si tu connais Doxygen, commente chacune de tes fonctions. Ça te fera gagner pas mal de temps quand tu te reserviras de ta bibliothèque.

4) Avis personnel : N'hésite pas à utiliser les paramètres optionnels pour compléter le comportement de tes fonctions

exemple:
function arrayDisplay($array, $htmlFormat = FALSE)
{
   if (!$htmlFormat)
       print_r($array);
   else
   {
        ... // affichage du tableau au format html
   }
}

// appels de fonctions valides :
arrayDisplay($myArray);  // affichage classique, pas besoin de preciser le comportement
arrayDisplay($myArray, TRUE); // on precise qu'un affichage HTML est souhaité
5) Fouille bien la Doc PHP, des fois on tombe sur des fonctions farfelues qui font déjà ce qu'on souhaite faire ;)

Posté : 19 janv. 2008, 20:55
par AB
...
3) Si tu connais Doxygen, commente chacune de tes fonctions. Ça te fera gagner pas mal de temps quand tu te reserviras de ta bibliothèque..;
Bah heu ... même si tu ne connais pas Doxygen cela ne t'empêches pas de commenter tes fonctions ... :wink: L'expérience montre que - comme déjà mentionné - cet investissement temps devient vite rentable et cela d'autant plus que ta bibliothèque s'agrandit.

Sinon dans ma bibliothèque je regroupe les fonctions par catégories. ça me permet de virer facilement celles dont je n'ai pas besoin suivant les projets pour ne charger que le code utile. Enfin comme l'a dit Berzemus, à chacun de faire son expérience, car c'est suivant les besoins.

Posté : 20 janv. 2008, 12:29
par Ryle
Le "problème" de php (si l'on peut le qualifier ainsi), c'est qu'il n'y a pas de normes en la matière. PHP lui même est incapable de suivre certains des conseils - pourtant évident - donnés ici :)
La fonction strstr() trouve la première occurrence d’une chaîne dans une autre. Le premier argument est la chaine parente, le second la chaine recherchée. Par contre, la fonction str_replace() qui permet de remplacer toutes les occurrences dans une chaîne commence par la chaine recherchée, puis la chaine remplacée et enfin la chaine parente. La chaîne cherchée se trouve alternativement en dernier et en premier argument.

Concernant le nom des fonctions, certaines comportent des underscores (str_replace(), str_repeat(), etc.) et d’autres non (strlen(), strpos(), etc.). Pire encore stripslashes() qui supprime les anti-slash et strip_tags() qui supprime les balises HTML.

Certaines fonctions de PHP sont au pluriel, d’autres non (array_diff_key() / array_fill_keys()). Certaines utilises un "2" au lieu de "to" comme bin2hex() par rapport à strToLower(), voire le zappent comme dechex() (et non pas dec2hex() qui n'existe pas)
Voilà déjà une belle liste de choses qu'il ne faut pas (faudrait pas en l'occurence) faire :)

En fait, il n'y a qu'un mot pour qualifier ta bibliothèque : elle doit être "cohérante". Aujourd'hui tu es peut être le seul à l'utiliser mais il faut également te dire que d'autres pourront être amenés à s'en servir, la maintenir, l'améliorer (ces autres pouvant très bien être toi dans 6 mois ! ;)), il faut que ce soit naturel et qu'on ne passe pas 3 jours à comprendre comment ça fonctionne :)

Donc au risque de reprendre ce qui a été dit plus haut il faut que les noms des fonctions soient explicites (on doit tout de suite savoir à quoi elle sert juste en lisant son nom), la syntaxe doit être normalisée (opter soit pour les underscore entre les mots soit pour une majuscule à chaque mot, de même partir sur des noms tout en anglais ou tout en français et éviter de varier), l'ordre des paramètres doit être intuitif pour pas avoir à revenir lire la doc à chaque fois, commente tout ce qui n'est pas évident (pas la peine de commenter une ligne du genre "$i++", mais si tu rentre dans un boucle, un p'tit mot pour dire ce qu'elle fait, c'est 10 secondes de perdues, mais peut être 30 minutes de gagnées quand tu reviendras dessus :)) ...