shingara
Messages postés10Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention11 janvier 2006
-
10 janv. 2006 à 21:10
sniperdu13
Messages postés1Date d'inscriptionmercredi 17 janvier 2007StatutMembreDernière intervention11 avril 2012
-
11 avril 2012 à 15:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
sniperdu13
Messages postés1Date d'inscriptionmercredi 17 janvier 2007StatutMembreDernière intervention11 avril 2012 11 avril 2012 à 15:16
Juste comme ça, je me suis permis de rajouter une méthode à ta class bench().
Plutôt que de passer par des echo $bench->variable->getResult(); pour chaque variable, je fais comme ça.
public function allResult() {
foreach ($this->bench as $key => $value) {
$array[$key] = $value->getResult();
}
return Fonction::printr($array);
}
Fonction::printr() n'est qu'un print_r() entouré de balise
Moins esthétique que du echo mais plus rapide à mettre en oeuvre pour du debug ;)
Merci beaucoup pour cette class en tout cas.
dalibeaugoss
Messages postés1Date d'inscriptionvendredi 11 décembre 2009StatutMembreDernière intervention21 février 2010 21 févr. 2010 à 12:09
Merci groupe codes sources
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 18 janv. 2006 à 14:03
Sympa je ne connaissais pas la fonction magique __get()... je suis pas encore trop php5 les serveurs pour lesquels je code étant encore en php4... .. .
j'ais une class que j'avais fais et qui utilise un principe d'auto increment pour gérer automatiquement plusieurs benchmarks imbriqués sans avoir à créer un nom à chaque fois... .. .
en gros tu as un attribut $benchmarkid qui s'increment de 1 lorsqu'un bench est lancé quand tu lance le benchmark tu fais
ça lance le timer et renvoi l'id du benchmark et quand tu veux stoper le bench et/ou récupérer le résultat tu fais
$monObjet->stotBench($benchId); pour juste le stoper ou $monObjet->getBench($benchId); pour le stopper, s'il ne l'est pas déja, et pour récupérer le résultat
les infos sont stocké dans un tableau comme suit...
array(
'desc' => 'le nom de la fonction testée',
'start' => 'le timer de départ',
'stop' => 'le timer de fin',
'total' => 'le résultat du benchmark',
'isFinish' => 'pour savoir si le bench est finit ou non pour le get'
),
L'avantage... t'as pas a faire de nom perso pour chaque bench vu que c'est un id numérique qui est attribué ça permet d'imbriquer des benchmark les uns dans les autres quand tu test par exemple une méthode d'une class qui fait elle même appel à d'autre méthodes... le désavantage... j'en vois pas si ce n'est peut être que les résultats sont stockés dans un taébleau un peu plus bordellique... et encore que... .. .
Voili voilou... rien de mirobolant... de toute façon pour une class de benchmark... lol... c'est juste une autre façon de faire... .. .
@ tchaOo°
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 16 janv. 2006 à 18:55
Ok ok, je vais changer...
Il ne me reste plus qu'à faire une interface avec zone de texte pour pouvoir faire ca plus rapidement que de devoir taper du code à chaque fois.
Jvais concocter ca dans pas longtemps (maintenant que j'ai optimisé ma classe de DB, je vais pouvoir le faire !)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 11 janv. 2006 à 14:26
Ouais je me suis aussi demandé pourquoi protected et pas private, en fait. Shingara a raison.
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 11 janv. 2006 à 14:22
Voui, en effet j'avais mis protected mais j'aurais bien dû la mettre en private (j'avais encore le modèle de ma classe de BDD en tête avec un tas de propriétés en protégées...).
Sinon, jvais essayer de faire comme tu veux Malalam... genre une petite extension vite fait. J'avais quelque chose de très basique, je dois pouvoir facilement y rajouter 2-3 trucs allègrement :)
shingara
Messages postés10Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention11 janvier 2006 11 janv. 2006 à 13:58
Pourquoi pas de protected, car protected n'est à utiliser que dans le cas ou tu auras des classes qui hériteront de tes classes et qui pourront modifier ces valeurs.
Personnelement, je préfére la technique :
- Tous les attributs en private
- methode getAttr() pour obtenir la valeur.
En fait c'est une technique de programmation qui se dit. Ma classe ne doit jamais pouvoir etre modifié sans que je le sache. En effet, si je crée un script qui herite de ta classe avec une simple methode qui fait :
plante(){
$this -> start() = 'echec'
}
et que je lance la methode getResult(), j'obtiens une erreur.
Enfin chacun sont truc :)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 11 janv. 2006 à 13:48
Si si c'est ça. Enfin, je VEUX...c'est une suggestion hein, lol.
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 11 janv. 2006 à 13:43
Arf, c'est mal passé...
Quelle merde ce truc des fois... je reprend :
$sql1 --> 'Requète 1' => Calculer différence de temps
--> 'Requète 2' => Ou sortir la requète la plus rapide.
C'est ca ou pas du tout ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 11 janv. 2006 à 12:37
Hello,
po mal :-)
Pour $time, dans la mesure où ce résultat est récupéré via une méthode, je ne vois pas d'inconvénient à ce qu'elle ne soit pas accessible directement.
Pour __get(), pourquoi pas, c'est élégant.
Moi j'aime bien.
Par contre, 3 fois rien, mais j'aurais bien ajouté un commentaire à tes bench. je veux dire, la possibilité d'ajouter un commentaire (typiquement, pour une requête sql puisque tu prends cet exemple : la requête elle-même).
Voire un état statistique ;-) Je m'explique : polusieurs bench associé à 1 élément. je reprends l'exemple des requêtes sql : au lieu de créer plusieurs éléments (sql1, sql2), donner la possibilité de créer plusieurs bench pour 1 élément : slq1, avec des benchs différents pour chaque modification apportée à la requête : 'SELECT nom, prenom FROM personnes' est-il plus rapide que 'SELECT * FROM personnes'...cela se rapporte à la même requête en fait. Puis sortir avec le getResult, la requête effectuée, et le temps, pour ce sql1 que l'on teste. Tu saisis ?
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 10 janv. 2006 à 22:57
"Je ne suis pas trop d'accord avec les variables de classes protected." Pourquoi donc ?
$start et $stop ne servent qu'à l'interieur de la classe.
$time pourrait servir en dehord de la classe, j'aurais pu la mettre public.
$bench doit resté protégé car ca ne sert à rien de la mettre en public.
Vaut il mieux faire :
$bench->page->getResult();
plutot que :
$bench->bench['page']->getResult(); ?
C'est au choix, moi je préfère la première. Voila pourquoi j'utilise la méthode __get(). Elle est faite pour ca, autant l'utiliser !
Bien sur, y'a un paquet de méthode pour faire un chronomètre, j'aurais pu le faire en une seule classe en rappelant à chaque fois le nom_du_bench à chaque méthode, mais aucun intérêt de faire de l'objet dans ce cas la.
Mais tu as un point de vue différent, et je serais bien content de le connaitre jusqu'au bout :)
shingara
Messages postés10Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention11 janvier 2006 10 janv. 2006 à 21:10
Je ne suis pas trop d'accord avec les variables de classes protected. Mais c'est surement une question de gestion de classe propre à chacun.
Sinon, je suis pas forcement sur que ca sert vraiment à quelque chose de mettre cette fonction _get()
11 avril 2012 à 15:16
Plutôt que de passer par des echo $bench->variable->getResult(); pour chaque variable, je fais comme ça.
public function allResult() {
foreach ($this->bench as $key => $value) {
$array[$key] = $value->getResult();
}
return Fonction::printr($array);
}
Fonction::printr() n'est qu'un print_r() entouré de balise
Moins esthétique que du echo mais plus rapide à mettre en oeuvre pour du debug ;)
Merci beaucoup pour cette class en tout cas.
21 févr. 2010 à 12:09
18 janv. 2006 à 14:03
j'ais une class que j'avais fais et qui utilise un principe d'auto increment pour gérer automatiquement plusieurs benchmarks imbriqués sans avoir à créer un nom à chaque fois... .. .
en gros tu as un attribut $benchmarkid qui s'increment de 1 lorsqu'un bench est lancé quand tu lance le benchmark tu fais
$benchId = $monObjet->startBench('la description');
ça lance le timer et renvoi l'id du benchmark et quand tu veux stoper le bench et/ou récupérer le résultat tu fais
$monObjet->stotBench($benchId); pour juste le stoper ou $monObjet->getBench($benchId); pour le stopper, s'il ne l'est pas déja, et pour récupérer le résultat
les infos sont stocké dans un tableau comme suit...
array(
'desc' => 'le nom de la fonction testée',
'start' => 'le timer de départ',
'stop' => 'le timer de fin',
'total' => 'le résultat du benchmark',
'isFinish' => 'pour savoir si le bench est finit ou non pour le get'
),
L'avantage... t'as pas a faire de nom perso pour chaque bench vu que c'est un id numérique qui est attribué ça permet d'imbriquer des benchmark les uns dans les autres quand tu test par exemple une méthode d'une class qui fait elle même appel à d'autre méthodes... le désavantage... j'en vois pas si ce n'est peut être que les résultats sont stockés dans un taébleau un peu plus bordellique... et encore que... .. .
Voili voilou... rien de mirobolant... de toute façon pour une class de benchmark... lol... c'est juste une autre façon de faire... .. .
@ tchaOo°
16 janv. 2006 à 18:55
Il ne me reste plus qu'à faire une interface avec zone de texte pour pouvoir faire ca plus rapidement que de devoir taper du code à chaque fois.
Jvais concocter ca dans pas longtemps (maintenant que j'ai optimisé ma classe de DB, je vais pouvoir le faire !)
11 janv. 2006 à 14:26
11 janv. 2006 à 14:22
Sinon, jvais essayer de faire comme tu veux Malalam... genre une petite extension vite fait. J'avais quelque chose de très basique, je dois pouvoir facilement y rajouter 2-3 trucs allègrement :)
11 janv. 2006 à 13:58
Personnelement, je préfére la technique :
- Tous les attributs en private
- methode getAttr() pour obtenir la valeur.
En fait c'est une technique de programmation qui se dit. Ma classe ne doit jamais pouvoir etre modifié sans que je le sache. En effet, si je crée un script qui herite de ta classe avec une simple methode qui fait :
plante(){
$this -> start() = 'echec'
}
et que je lance la methode getResult(), j'obtiens une erreur.
Enfin chacun sont truc :)
11 janv. 2006 à 13:48
11 janv. 2006 à 13:43
Quelle merde ce truc des fois... je reprend :
$sql1 --> 'Requète 1' => Calculer différence de temps
--> 'Requète 2' => Ou sortir la requète la plus rapide.
C'est ca ou pas du tout ?
11 janv. 2006 à 12:37
po mal :-)
Pour $time, dans la mesure où ce résultat est récupéré via une méthode, je ne vois pas d'inconvénient à ce qu'elle ne soit pas accessible directement.
Pour __get(), pourquoi pas, c'est élégant.
Moi j'aime bien.
Par contre, 3 fois rien, mais j'aurais bien ajouté un commentaire à tes bench. je veux dire, la possibilité d'ajouter un commentaire (typiquement, pour une requête sql puisque tu prends cet exemple : la requête elle-même).
Voire un état statistique ;-) Je m'explique : polusieurs bench associé à 1 élément. je reprends l'exemple des requêtes sql : au lieu de créer plusieurs éléments (sql1, sql2), donner la possibilité de créer plusieurs bench pour 1 élément : slq1, avec des benchs différents pour chaque modification apportée à la requête : 'SELECT nom, prenom FROM personnes' est-il plus rapide que 'SELECT * FROM personnes'...cela se rapporte à la même requête en fait. Puis sortir avec le getResult, la requête effectuée, et le temps, pour ce sql1 que l'on teste. Tu saisis ?
10 janv. 2006 à 22:57
$start et $stop ne servent qu'à l'interieur de la classe.
$time pourrait servir en dehord de la classe, j'aurais pu la mettre public.
$bench doit resté protégé car ca ne sert à rien de la mettre en public.
Vaut il mieux faire :
$bench->page->getResult();
plutot que :
$bench->bench['page']->getResult(); ?
C'est au choix, moi je préfère la première. Voila pourquoi j'utilise la méthode __get(). Elle est faite pour ca, autant l'utiliser !
Bien sur, y'a un paquet de méthode pour faire un chronomètre, j'aurais pu le faire en une seule classe en rappelant à chaque fois le nom_du_bench à chaque méthode, mais aucun intérêt de faire de l'objet dans ce cas la.
Mais tu as un point de vue différent, et je serais bien content de le connaitre jusqu'au bout :)
10 janv. 2006 à 21:10
Sinon, je suis pas forcement sur que ca sert vraiment à quelque chose de mettre cette fonction _get()