Bonjour,
Je suis sur un projet assez important qui vise à développer un SI pour gérer des automates de vente. Le but est d'exposer des webservices à ces automates et de faire le lien avec des webservices externes.
Il y a donc une forte composante "temps réel", pas forcément pour les webservices eux-mêmes mais pour toutes les tâches annexes de supervision, logging... Le choix du PHP me semble être une erreur mais il s'agit en fait de développer un POC avant de le refaire en JavaPeu importe, je vais faire ce qu'on me demande...
Et donc j'en suis à développer un composant de logging, et des questions essentielles sur le moteur PHP me viennent :
- J'aimerais déclarer un composant Logger qui soit unique (singleton) et partagé par tous les appels faits par les automates... ça me semble impossible en PHP. Pour moi, chaque appel de webservice par un automate va ouvrir une session et donc une instance de chaque classe de l'applicatif (je suis clair ?).
Voici le code de mon Logger, les appels étant faits en statique :
Est-ce que mon singleton est un vrai singleton (au sens du pattern Java) ? Est-ce possible de créer ce type de composant en PHP, avec persistance de l'instance, et unicité de celle-ci ?
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 <?php require_once(__PATH__.'/../config/db.php'); require_once('SiErreur.php'); class Logger { private static $instance; private static $db; private static $logRequest; private function __construct() { try { self::$db = new PDO( 'mysql:host='.PARAMDB_HOTE_LOGGER.';dbname='.PARAMDB_NOMBD_LOGGER, PARAMDB_USER_LOGGER, PARAMDB_MDP_LOGGER, array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT => true)); // Requête préparée pour insérer chaque ligne de LOG self::$logRequest = self::$db->prepare( "INSERT INTO test.LOG (ID_MV, DATE, HEURE, SI_CAT, EVT_TXT) VALUES (:id_mv, :date, :heure, :si_cat, :evt_txt)"); self::$instance = 1; } catch(SiErreur $siE) { $siE->ecritErreur(); } } public static function singleton() { if(!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c(); } return self::$instance; } public static function ecritLog($siCat, $evtTxt) { try { $i = 1/0; self::$logRequest->execute(array( ':id_mv' => 'LOCALHOST', ':date' => date('Y-m-d'), ':heure' => date('H:i:s'), ':si_cat' => $siCat, ':evt_txt' => $evtTxt)); } catch(SiErreur $siE) { $siE->ecritErreur(); } } } Logger::singleton(); ?>
Merci d'avance !
Partager