Voici une petite classe simplissime pour gérer l'inclusion de vos fichiers de classes dans vos documents php. Utile pour ceux qui sont en php<5, en php 5 il y a plus simple (voir interventions ci-dessous, merci à Yogui)
Ses avantages sont:
-inutile de retaper tout le chemin des fichiers de classe dans chaque document ou elles sont utilisées
-corolaire du premier: si vous changez le chemin d'un de vos fichiers de classe, inutile de le changer dans tout les documents ou elles sont utilisées
-inutile de se préoccuper de savoir si la classe n'a pas déjà été déclarée ailleurs
-quand une classe étends une autre classe ou utilise une occurence de cette classe, inutile de se préoccuper d'inclure la classe étendue ou celle dont on utilise une occurence, ni de l'ordre dans lequel on les inclus.
Voici la classe classmanage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 class classmanage{ var $classpath=array("utilisateur"=>"../auxil/utilisateur.php","php_data"=>"../auxil/php_data.php","postgetcookie"=>"../auxil/postgetcookie.php", "file"=>"../auxil/file.php","php_mysql"=>"../auxil/php_mysql.php","html_php"=>"../auxil/html_php.php"); var $included=array(); var $extended=array("utilisateur"=>"php_data,php_mysql,postgetcookie","php_data"=>"file","html_php"=>"postgetcookie"); var $limit=100; function inclure($class,$i=0){ if ($i>$this->limit) return false; $class=explode(",",$class); while ($el=each($class)){ $a=trim($el["value"]); if (!isset($this->included[$a])) { if (isset($this->extended[$a])) $this->inclure($this->extended[$a],$i+1); include($this->classpath[$a]); $this->included[$a]=1; } } } }
Mode d'emploi:
-On ne peut créer qu'une occurrence de la classe par script (sinon on risque d'essayer d'inclure deux fois la même classe). Les utilisations de cette classe dans une fonction se feront pas une déclaration dans cette fonction de cette unique occurrence comme globale
-Chacune de vos classes sera identifiée par un identifiant ne comportant pas le caractère virgule ",". Ici les noms sont php_data , postgetcookie, file . Vous choisissez les identifiants comme bon vous semble
-La variable $classpath de la classe classmanage est un tableau (que vous modifierez en fonction de vos classes) sous la forme "cle"=>"valeur" , ou "cle" est l'identifiant de la classe et "valeur" est le chemin du fichier de cette classe. Si vous voulez changer ce chemin, il suffira de le faire uniquement dans le fichier de déclaration de classmanage. Par exemple ici "../classes3/file.php" est le chemin de la classe identifiée par file
-La variable $extended de la classe classmanage est un tableau (que vous modifierez en fonction de vos classes) sous la forme "cle"=>"valeur" , ou "cle" est l'identifiant de la classe qui utilise d'autres classes (par extension ou création d'une occurence) et "valeur" est le liste des identifiants des classes utilisées, séparées par des virgules. Par exemple, ici la classe "php_data" est une extension de la classe "file" et utilise une occurrence de la classe "postgetcookie"
-Pour utiliser la classe "classmanage", on crée une occurrence, et on appelle sa fonction inclure($a) ou son paramètre $a doit être la liste des identifiants des classes à inclure séparées par des virgules .
Exemple:
Dans cet exemple, on inclus les classes php_data et file. On suppose que php_data est une extension de la classe file, mais peut importe l'ordre dans la fonction inclure (pas besoin de se préoccuper de l'ordre des inclusion, c'est un des avantages). Si php_data étends file, on peut remarquer que le code ci-dessus est équivalent à celui-ci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $cm=new classmanage(); $cm->inclure("php_data,file");
Car inclure php_data inclus automatiquement file.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $cm->inclure("php_data");
Le code suivant:
ne posera aucun problème, la classe file ne sera inclus qu'une fois
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $cm->inclure("php_data,file"); $cm->inclure("file");
Le code suivant ne pose pas non plus de problème:
bien que php_data soit une extension de file
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $cm->inclure("php_data"); $cm->inclure("file");
-Le paramètre $i de include doit être toujours omis. Il sert de compteur pour limiter le nombre d'appel à des extensions successives (genre class1 extends class2, class2 extends class3, class3 extends class4, etc). c'est un garde-fou pour qui se serait trompé dans sa définition de $extended et aurait fait un truc qui se reboucle sur lui-même. Le nombre max d'extensions successives et donne par $limit, vous pouvez le modifier si vous en avez besoin de plus ( cequi serait quand même étonnant ).
En résumé, la classe "classmanage" permet d'inclure ses classes sans se poser de question, ce que je trouve très pratique surtout quand on inclus ses classes au moment ou on en a besoin et si on en a besoin. Dans ces cas-la, inutle de se demander si ne les a pas incluses ailleurs ou si il faut inclure la classe dont elle est l'extension, on inclus et classmanage fait le reste.
On peut s'en servir aussi pour inclure d'autres fichiers de code php que des classes, mais c'est moins intéressant.
Et pour les petits rigolos qui poseraient la question, non, on ne peut pas inclure la classe classmanage avec la classe classmanage
Partager