Plusieurs questions sur PDO et les classes
Bonjour et merci pour ce superbe site avec des tutos trés interressant. j'ai plusieurs questions encore :
1) Concernant PDO, j'utilise un classe singleton, mais je me damander quand fermer l'instance. ($this->PDOInstance = null ) dans le sens ou pour chaque requette on ferme l'instance ou en fin de traitement (page) uniquement ?
2) Je ne comprend pas pourquoi fetchAll(PDO::FETCH_OBJ) renvoi un array d'object(stdClass) alors que fetch(PDO::FETCH_OBJ) renvoi simplement un object(stdClass). Est ce normal ? car pour l'affichage des données ensuite ça peut être gênant.
3) Concernant les classes, faut il mieux creer un fichier par classe ou plusieurs classes dans un même fichier. Est ce plus lourd.
4) Et enfin, je trouve que l'utilisation de classe et de PDO a un petit peu alourdi mon site par rapport a l'utilisation de fonction et requette classique mysql_fetch_object. (test réaliser avec des marqueurs) est ce normal ou j'ai programmé mes classes comme un chèvre.
merci d'avance
Réponses apportées à cette discussion
Bonjour Baboune,
Tout d'abord, merci pour tes félicitations :) Concernant tes questions, voici les questions que je peux t'apporter :
1/ L'instance PDO ne doit pas être interrompue entre deux requêtes. En effet, ce qui coûte énormément de temps dans l'exécution d'un script, c'est notamment la phase de connexion à la BDD. Donc une fois ouverte, tu exécutes tes requêtes sur la même connexion. Tu n'as nul besoin de détruire toi même ton instance à la main lorsque tu n'en as plus besoin puisque PHP le fait automatiquement lui même à la fin de l'exécution du script.
2/ Simplement parce que fetch() ne renvoit qu'un tuple de la BDD donc un objet directement. En revanche, fetchAll() renvoit tous les tuples de la requête donc forcément un tableau d'objets. Le seul moyen de stocker plusieurs objets dans une même variable est d'utiliser un tableau (array()).
3/ Le mieux est de faire une classe par fichier car c'est plus maintenable et ça peut être plus performant aussi. Mais c'est surtout niveau maintenabilité car si tu dois débugguer le code d'une classe tu sauras tout de suite où le trouver grâce à son nom de fichier. Si tu as plusieurs classes d'un fichier et que tu dois débugguer le code, tu vas sauter de joie pour retrouver dans quel fichier se trouve la classe.
4/ C'est normal ! Les classes et objets occupent plus de place en mémoire que les simples variables et fonctions. Mais malgré les quelques pertes de performances, qui peuvent d'ailleurs être compensées grâce à des stratégies de cache par exemple, tu gagnes énormément en lisibilité, en clarté, en architecture, en fonctionnalités...
A bientôt,
Hugo.