begin process at 2012 05 27 17:57:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > PHP5 - CLASSE DE LOGGING DE CLASSES.

PHP5 - CLASSE DE LOGGING DE CLASSES.


 Information sur la source

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :poo, surcharge, objet, php5 Niveau :Initié Date de création :15/04/2006 Date de mise à jour :15/04/2006 20:55:00 Vu :3 533

Auteur : FhX

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cette classe sert à logguer les différentes méthodes et autres fonctions que vous pouvez appeler dans un script.
En l'état pur, la classe ne sert pas à grand chose, mais elle est tellement simple qu'elle peut se faire hériter très facilement pour quelque chose de plus spécialiser (normal, c'est son but !).

Voici donc la classe basique et une classe dérivée qui peut logguer les actions d'appels de méthodes d'une classe SQL.

Source

  • <?php
  • class Logger {
  • protected $objet = NULL;
  • public $Log = array(
  • 'method' => NULL,
  • 'args' => NULL);
  • public function __construct($objet) {
  • $this->objet = $objet;
  • }
  • public function __call($name, $args) {
  • $this->LogTo($name, $args);
  • return call_user_func_array( array(&$this->objet, $name), $args);
  • }
  • protected final function LogTo($name, $args) {
  • $this->Log['method'] = $name;
  • $this->Log['args'] = $args;
  • }
  • public final function getLog() {
  • return $this->Log;
  • }
  • public final function Clear() {
  • $this->Log = array('method' => NULL, 'args' => NULL);
  • }
  • public function __get($var) {
  • return $this->objet->$var;
  • }
  • public function __set($var, $val) {
  • $this->$objet->$var = $val;
  • }
  • }
  • class SQLLog extends Logger {
  • private $array = array(
  • 'SELECT' => 0,
  • 'UPDATE' => 0,
  • 'INSERT' => 0,
  • 'DELETE' => 0);
  • public $nb_query = 0;
  • public $time_query = 0;
  • public function __call($name, $args) {
  • if ( strtolower($name) === 'query' ) {
  • if ( isset($args) && !empty($args) ) {
  • $typeofQuery = trim(substr($args[0], 0, 6));
  • } else {
  • $typeofQuery = trim(substr($this->objet->sql, 0, 6));
  • }
  • $this->array[$typeofQuery]++;
  • $query_start = microtime(true);
  • $output = call_user_func_array( array(&$this->objet, $name), $args);
  • $this->time_query = microtime(true) - $query_start;
  • $this->nb_query++;
  • } else {
  • $output = call_user_func_array( array(&$this->objet, $name), $args);
  • }
  • $this->LogTo($name, $args);
  • return $output;
  • }
  • }
  • ?>
<?php
class Logger {
 
 protected $objet = NULL;
 public $Log = array(
         'method' => NULL,
         'args'   => NULL);
 
 public function __construct($objet) {
  $this->objet = $objet;
 }
 
 public function __call($name, $args) {
  
  $this->LogTo($name, $args);
  return call_user_func_array( array(&$this->objet, $name), $args);
  
 }
 
 protected final function LogTo($name, $args) {
  $this->Log['method'] = $name;
  $this->Log['args'] = $args;
 }
 
 public final function getLog() {
  return $this->Log;
 } 
 
 public final function Clear() {
  $this->Log = array('method' => NULL, 'args' => NULL);
 }
 
 public function __get($var) {
  return $this->objet->$var;
 }
   
 public function __set($var, $val) {
  $this->$objet->$var = $val;
 }
 
}

class SQLLog extends Logger {
 
 private $array = array(
         'SELECT' => 0,
		 'UPDATE' => 0,
		 'INSERT' => 0,
		 'DELETE' => 0);
		 
 public $nb_query = 0;
 public $time_query = 0;
 
 public function __call($name, $args) {
 
  if ( strtolower($name) === 'query' ) {
       if ( isset($args) && !empty($args) ) {
            $typeofQuery = trim(substr($args[0], 0, 6));
	   } else {
	        $typeofQuery = trim(substr($this->objet->sql, 0, 6));
	   }
	   
	   $this->array[$typeofQuery]++;
	   
	   $query_start = microtime(true);
       $output = call_user_func_array( array(&$this->objet, $name), $args);
	   $this->time_query = microtime(true) - $query_start;
	   
	   $this->nb_query++;
	   
  }	else {
       $output = call_user_func_array( array(&$this->objet, $name), $args);
  }
  
  $this->LogTo($name, $args);
  return $output;
  
 }
 
}
?>

 Conclusion

Alors comment ca tourne ?
Si avant, vous appeliez votre classe SQL comme suit :
$db = new mysql;
Il suffit pour cela de faire :
$db = new SQLlog( new mysql );

Et vous utilisez votre objet comme avant :
$db->query().
$db->fetch_row().

La classe de log est totalement transparente grâce à __call()... donc sans soucis pour l'utilisation :)


 Historique

15 avril 2006 20:55:01 :
Update de code :) C'est un peu plus propre maintenant !

 Sources du même auteur

PHP5 - UTILISATION DES ITÉRATEURS ET DE LA RÉFLECTION.
PHP 5 - CLASSE MYSQL (STYLE MYSQLI)
[PHP5] CLASSE DATE/HEURE
PHP5 - GESTION DE MODULES EN OBJET
PHP5 - CLASSE DE NEWS ET DE COMMENTAIRES

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TODO LIST (AJAX/PHP5) par VinceMonkeyz
Source avec Zip MY.REMOTE : SERVEUR D'OBJETS PHP5 par inwebo
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
CLASS RECHERCHE PHP5 POO par mtrix000
Source avec Zip PHP5 MY EXPLORER : AFFICHE L'ARBORESCENCE DE DOSSIERS par ranouf

Commentaires et avis

Commentaire de malalam le 16/04/2006 09:58:40 administrateur CS

Hello,

pas le temps de tester là, ni de mater le code en détail, je verrai ça mardi.
Mais bon : j'aiome bien, déjà...même si un truc me gène : le fait d'appeler un peu à l'envers, lol. Je veux dire de passer par l'objet logger pour instancier la classe que je veux utiliser avec :-)
mais bon...c'est du pinaillage :-)

Commentaire de FhX le 16/04/2006 13:47:54

Voui mais c'est invisible :)

Disons que ca rajoute une couche entre ta classe et le reste du script.
A n'utiliser par exemple que pour un débuggage ou autre !

Commentaire de Garno le 16/04/2006 22:14:22

Si j'ai bien compris, tu utilise le concept de Polymorphisme ? Ça fait longtemps que j'essai de comprendre ce concept et que je n'arrive pas a trouver d'utiliter réelle. Par contre, si c'est vraiment ce concept qui est exploiter dans cette source je trouve sa vraiment utile et ça me donne bien des idées :)

Commentaire de FhX le 17/04/2006 00:23:35

C'est pas tout à fait du polymorphisme...
Le polymorphisme, c'est ca :

[ abstract ] class x {

[ abstract ] ( public/private/protected ) function y() {
   // Code
}

}

class z extends x {

( public/private/protected ) function y() {
    // parent::y(); si tu veux appeler la méthode parent
    // code supplémentaire
}

}

class a extends y {

( public/private/protected) function y() {
   // code différent de l'autre classe.
}

}

Le polymorphisme, c'est utiliser une méthode commune sur différentes classes mais qui exécute du code différement.
:)
  

Commentaire de Garno le 22/07/2006 23:02:10

Je vien de voir qu'on avait répondu a ma question :p désolé pour le délais et merci pour l'explication... En fait j'utilisais déjà le polymorphisme sans le savoir lol. Rien ne vaut un exemple pour comprendre le fonctionnement. Merci Bcp !!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Class POO retourné le nom de l'objet [ par MeTh ] Bonjour,Comment retourné le nom de l'objet déclaré?exemple :$monobjet = new GridR();comment recuperé $monobjet dans ma class?Merci objet php5 surdéfinition de fonctions [ par poiuytrez3 ] Bonjour, j'ai crée un objet php5 avec plusieurs membres privés. J'ai donc crée une fonction function __get($attribut){ return $this->attribut; } e Probleme POO [ par cedriclomb ] Bonjour,Aujourd'hui au programme casse tete chinois ! :DVoila j'ai une classe B qui est une extends de Aun objet $b=new B;et ensuite $b-&gt;loadModule orienté objet en php [ par am1ra2 ] bonjour,    j'ai des connaissances sur la POO en php mais je ne connais pas comment implimenter la POO dans mes applications. aide en php5 [ par RachDevelop ] bonjour un tous je débute en php objet , si quelcun peut me m'aider avec un tutorial ou des conseils , car j'ai pas une grande vision objet et je rame Cour sur la programmation oriente objet avec PHP5 [ par adama36 ] Bonjour, Je suis développeur d'application dans une entreprise et je développe avec les langage PHP4/HTML/CSS. Vue l&#8217;évolution du langage PHP qu message d'alerte pour eviter d'enregistrer la meme donner [ par msi079 ] salut . j'ai crée un code php qui marche très bien . mais je voudrai juste qu'elle m'affiche un message d'erreur pour éviter les doublons . par exemp php5 et moteur de template "smarty" [ par smahaneAAI ] Bonjour tout le monde! J'ai eu un projet de la création d'un site web concernant les appelles d'offre, ce projet doit être réalisé en langage php5 et $_server [ par azeiroph ] Bonjour, Je tente actuellement de migrer un applicatif initialement sur php4 vers php5. La migration ce passait bien jusqu'à ce que je tombe sur le PHP5 SQL TIME [ par ftsitoha ] Bonjour les amies !!! Question web PHP- SQL -TIME? J&#8217;aimerai bien connaître l&#8217;erreur de ces 2 scriptes, mon attribue n&#8217;est pas ti


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,732 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales