class

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : class

par mcorgnet » 06 mai 2008, 09:04

Tenez, tant qu'on y est, vous pensez quoi des connexions persistantes ?

par Hywan » 06 mai 2008, 00:28

Hey :),

Comme je suis de retour, je me permets de mettre mon grain de sel.
On parle de fermer les connexions de PDO, mais les ressources de PDO sont stockées dans des attributs. À la fin de l'exécution d'un script, la méthode magique de destruction de l'objet (__destruct) va être appelée avant que le système détruise l'objet. Je ne me souviens plus des sources de PDO, mais si la connexion n'est pas fermée et détruite par la méthode __destruct, elle sera forcément détruite lorsque l'objet sera détruit naturellement par le système (la mémoire des attributs sera libérée, puis on passera à la libération des méthodes).

Je pense que par la suite, PHP est suffisamment bien conçu (et qu'on peut par conséquent lui faire confiance) pour que quand une ressource est supprimée, elle soit clos dans les deux sens (PHP vers BD par exemple et BD vers PHP).

Le ramasse-miette — pour reprendre la traduction de nos amis Java — n'intervient que si un objet n'a pas été supprimé alors qu'il aurait du ou qu'il le pourrait. Et je ne sais même pas si cette notion existe en PHP car le temps de vie d'un script est extrêmement faible (sauf cas de permanence exceptionnelle).

En conclusion, on doit retenir qu'il est préférable de fermer nous même nos ressources car on sait exactement ce que l'on fait et ça nous assure un meilleur fonctionnement, même si PHP s'est prendre tout ça en charge car c'est un peu son but (faciliter les tâches).

par dunbar » 05 mai 2008, 16:14

Je pense aussi qu'il est préférable de fermer la connexion mysql lorsqu'on n'en a plus besoin. Sur un petit site, cela ne changera pas grand chose mais sur un site à fort audience cela permettrra de soulager quelque peu le serveur de base de données et de ne pas atteindre trop souvent le nombre maximum de requêtes simultanées.

:-k En partant du principe que la connexion se referme seule, n'envoie ton pas inutilement des requêtes en lui demandant de fermer la connexion :?:

par Cyrano » 05 mai 2008, 16:12

Ok, alors je vais vous montrer ce que nous dit la doc PHP, je n'ai rien inventé :
L'utilisation de mysql_close() n'est pas habituellement nécessaire, puisque les connexions non persistantes ouverts sont automatiquement fermées à la fin l'exécution du script.
Ainsi que :
Freeing resources

Thanks to the reference-counting system introduced with PHP 4's Zend Engine, a resource with no more references to it is detected automatically, and it is freed by the garbage collector. For this reason, it is rarely necessary to free the memory manually.

Note: Persistent database links are an exception to this rule. They are not destroyed by the garbage collector. See the persistent connections section for more information.
En clair, à moins d'utiliser une connexion persistante, on peut laisser faire le "garbage collector" qui va se charger automatiquement de clore une connexion qui n'est plus utilisée en arrivant à la fin du script. Et l'utilisation d'une connexion persistante n'est pas toujours justifiée, il faut être prudent avec ça, on peut avoir des surprises désagréables. Voir la doc sur le sujet

par nicolas » 05 mai 2008, 15:56

Je pense aussi qu'il est préférable de fermer la connexion mysql lorsqu'on n'en a plus besoin. Sur un petit site, cela ne changera pas grand chose mais sur un site à fort audience cela permettrra de soulager quelque peu le serveur de base de données et de ne pas atteindre trop souvent le nombre maximum de requêtes simultanées.

par AB » 05 mai 2008, 01:30

N'oublie pas de fermer ta connexion à la fin :roll:
Pas obligatoire dans ce cas, c'est implicite en PHP avec MySQL.
@katagoto,
Cette remarque de Cyrano peut se comprendre.
A un moment j'avais pris le parti de fermer ma connexion MySQL pour faire les choses "proprement". Mais dans certains scripts, ça m'a posé problème. Ayant ensuite lu pas mal de documentation sur le sujet, finalement je fais plutôt attention à libérer les ressources de chaque requête et je laisse php fermer la connexion automatiquement.

Disons que d'après mon expérience avec PHP/MySQL je ne pourrais pas donné comme conseil "systématique" de "ne pas oublier de fermer la connexion" Et je ne pourrai pas non plus conseiller systématiquement l'avis contraire. Mais ce que je peux dire c'est que la déconnexion automatique ne m'a encore jamais posé de problème jusqu'à présent :wink:

par zeus » 03 mai 2008, 20:25

Donc, toi aussi tu me pourchasse
Ben ouais, on s'y met à deux. À nous deux, on totalise plus de 26000 interventions dans ces forums, ce qui représente tout de même plus de 10% du total des messages postés sur PHPFrance. Avec tes 140 messages, je me demande si tu réalises que tu es loin d'avoir gagné en crédibilité ici...
Selon moi, cet argument n'est pas recevable.
On apporte des conseils, on essaye de résoudre des soucis, on utilise notre expérience pour cela.
Les membres qui viennent sur ce forum doivent pouvoir recevoir des conseils de tout le monde, du simple visiteur à l'administrateur.

Là où je suis bien d'accord avec toi, c'est que nous argumentons nos réponse, ou alors nous soulevons juste une suggestion.
Mais je ne me rappelle pas avoir imposé une de mes manières de faire.

par Cyrano » 03 mai 2008, 19:08

Donc, toi aussi tu me pourchasse
Ben ouais, on s'y met à deux. À nous deux, on totalise plus de 26000 interventions dans ces forums, ce qui représente tout de même plus de 10% du total des messages postés sur PHPFrance. Avec tes 140 messages, je me demande si tu réalises que tu es loin d'avoir gagné en crédibilité ici...

Note bien un truc : on essaye pas de montrer à qui que ce soit qu'on est meilleurs ou qu'on sait tout : on a des connaissances acquises avec de l'expérience et du métier et on les fait partager à ceux qui sont ouverts à l'apprentissage et demandent un coup de main. Mais justement, ces connaissances, on aime pas beaucoup qu'elles soient remises en causes avec des affirmations gratuites par le premier venu. Tu as une objection à émettre sur un point ? Alors argumente ta réponse avec des points techniques vérifiables dans une doc par exemple, ajoute des liens. Si tu as des réponses à apporter, n'apporte pas du code tout prêt : ça n'aide pas vraiment celui qui le demande. Montre plutôt le chemin pour qu'il trouve de lui-même la solution. Il en sera d'autant plus satisfait et fier de sa réussite. Et surtout, n'attends absolument aucun retour. Tant mieux si tu en as un, mais ce ne pourra être qu'un bonus. Et puis ce que tu apportes maintenant, c'est le retour de ce que tu as reçu lorsque toi-même apprenais.

par dunbar » 03 mai 2008, 18:27

Et moi qui pensait être suceptible :wink:
Oui bon ok je suis déjà dehors

par katagoto » 03 mai 2008, 17:23

Donc, tu dois dire "il est mieux de fermer la connexion", pas "il faut fermer la connexion"
Donc, toi aussi tu me pourchasse (:p)
Bref,
Si tu relis mon post, je n'ais jamais dis : il faut fermer la connexion j'ai dis n'oublie pas de fermer la connexion
Voilà

Bon si PHP5 est SI automatique que ça, il peut se coder tout seul :roll:

PS : Je ne me fis jamais a personne et encore moins aux automatismes des langages, voilà tout...

par Cyrano » 03 mai 2008, 16:58

Le destructeur est automatique en PHP5. Ce que tu peux faire en revanche, c'est spécifier des actions particulières. Mais l'objet instancié sera détruit dès qu'il ne sera plus utilisé.

par zeus » 03 mai 2008, 16:57

1. J'aimerais que tu arrête de me pourchasser
Il ne te pourchasse pas, il répond à une question et rebondi sur une réponse.
2. Moi on m'a apprit à fermer la connexion, donc je ferme toujours ma connexion, même si c'est implicite...
Donc, tu dois dire "il est mieux de fermer la connexion", pas "il faut fermer la connexion"

__destruct

par bruno.rotrou » 03 mai 2008, 16:56

merci pour vos conseils

pour ce qui est de fermer la connexion , je crois pouvoir vous mettre d'accord et la j'en serait très fier :wink:

que pensez vous de détruire le constrcuteur avec __destruct (j'ai lu ça quelque part mais je retrouve pas , c'est çà quand on veux faire le mariol :wink: )

pour ce qui est des autres conseils je suis d'accord sur le fait que je pourrais me servir d'autres méthodes pour récupérer les noms de champs et générer le fichier xml en laissant le constructeur pour la connexion
pour la notation j'adopterais la methode recommandée
merci A+
ps je vais essayer de retrouver le tut sur __destruct

par zeus » 03 mai 2008, 16:55

-3- là, c'est plus profond comme problème : ta classe est à usage unique. Tu pourrais avantageusement dissocier certains éléments dans des méthodes spécifiques. L'intérêt de l'objet, c'est de pouvoir en manipuler certaines propriétés pour obtenir des variantes dans le résultat.
++++++

LE énorme avantage de la POO, c'est la réutilisabilité.
En découpant ton traitement en section simple et distincte (récupération des donnée en base, affiche), tu peux remplacer ou réutiliser ces méthodes pour d'autres traitements sans dupliquer de code

par katagoto » 03 mai 2008, 16:33

1. J'aimerais que tu arrête de me pourchasser
2. Moi on m'a apprit à fermer la connexion, donc je ferme toujours ma connexion, même si c'est implicite...

Chacun ses habitudes :roll: