Damien L Posté 19 Avril 2008 Posté 19 Avril 2008 (modifié) Bonjour, Je suis entrain de réaliser ma toute première classe et le moins qu'on puisse dire c'est que ce n'est pas facile de perdre les vieilles habitudes pour passer à la POO. Cette classe est une classe de gestion des logs et j'ai un petit problème (rien à voir avec la classe) sur les saut de ligne avec fputs Je vous met la méthode en question : public function Ecriture($log_message, $type){ $chemin = $_SERVER['DOCUMENT_ROOT'].'/'.$this -> dossier . $this -> fichier . $this -> ext; $this -> SetType($type); if (!file_exists($chemin)) { $fichier = fopen($chemin, 'at'); fclose($fichier); } $log_ligne = date('d-m-Y H:i:s'); $log_ligne .= ' ['.$this -> type.']'; $log_ligne .= ' '.$log_message.'\n'; $fichier = fopen($chemin, 'a'); fputs($fichier, $log_ligne); fclose($fichier);} Quand je regarde le fichier log.log il n'y a pas de saut de ligne, tout est écrit à la suite. Pourtant j'ai bien mis $log_ligne .= ' '.$log_message.'\n'; Des idées ? Modifié 19 Avril 2008 par Damien L
TheRec Posté 19 Avril 2008 Posté 19 Avril 2008 Bonsoir, Les chaînes de caractères entre single quotes (') ne permettent pas l'utilisation de caractères d'échappement pour les caractères non-imprimables et autres caractères spéciaux. Essaie les double quotes : $log_ligne .= " ".$log_message."\n"; Bonne continuation.
Damien L Posté 19 Avril 2008 Auteur Posté 19 Avril 2008 (modifié) Super, c'est ça !!! Je pouvais chercher longtemps Je pensais que les single quoted et double quoted avaient exactement les mêmes fonctions, mais je vois que non grace au lien de TheRec, l'idéal est donc de toujours utiliser les double quoted ? Pendant qu'on y est, que pensez vous de ma première classe ? CODE <?PHPclass log { private $dossier; private $fichier; private $ext; private $type; public $chemin; public function SetDossier ($dossier ='log') { $this->dossier = $dossier.'/'; } public function GetDossier () { return $this->dossier; } public function SetFichier ($fichier = 'message') { $this->fichier = $fichier; } public function GetFichier () { return $this->fichier; } public function SetExt ($ext = 'log') { $this->ext = '.'.$ext; } public function GetExt () { return $this->ext; } public function SetType ($type = 1) { switch ($type) { case 1: $type_alerte = 'AVERTISSEMENT'; break; case 2: $type_alerte = 'ATTENTION'; break; case 3: $type_alerte = 'ERREUR'; break; default: $type_alerte = ''; } $this->type = $type_alerte; } public function GetType () { return $this -> type; } public function __construct($fichier) { $this->SetDossier(); $this->SetFichier($fichier); $this->SetExt(); $this->SetType(); } public function Ecriture($log_message, $type) { $chemin = $_SERVER['DOCUMENT_ROOT'].'/'.$this -> dossier . $this -> fichier . $this -> ext; $this -> SetType($type); if (!file_exists($chemin)) { $fichier = fopen($chemin, 'at'); fclose($fichier); } $log_ligne = date('d-m-Y H:i:s'); $log_ligne .= " [".$this -> type."]"; $log_ligne .= " ".$log_message."\n"; $fichier = fopen($chemin, 'at'); fputs($fichier, $log_ligne); fclose($fichier); } } ?> **EDIT Administrateur (TheRec)** Merci d'utiliser la balise CODEBOX à la place de CODE pour présenter un code long. Modifié 19 Avril 2008 par TheRec
TheRec Posté 19 Avril 2008 Posté 19 Avril 2008 l'idéal est donc de toujours utiliser les double quoted ? Il y a des benchmarks qui ont été réalisés à ce sujet, mais les résultats sont évidents. Sur une chaîne de caractère "banale" (sans variable à interpréter, sans caractères spéciaux à remplacer, etc.) les deux sont équivalents. Mais autrement, les single quotes ne faisant aucunement ce genre d'interprétation sont plus rapides logiquement. Donc il n'y a pas "d'idéal", mais une utilisation pour chaque cas. Personnellement j'ai tendance à conserver des convention de programmation assez régulière et utiliser des single quotes et la concaténation (.) lors que je veux utiliser des variables, puis si j'ai besoin de ce genre de caractère spéciaux j'utilise le double quotes. Note que tu peux te passer des double quotes dans ces cas également, en utilisant la fonction chr : $log_ligne .= ' '.$log_message.chr(10); Concernant ta classe, après une lecture en diagonale, je ne vois rien à redire, elle me semble correcte. Bienvenue dans la POO Le seule truc que je constate, c'est que tu as placé le constructeur de la classe au milieu du code, personnellement je le place après la déclaration des propriétés, mais ce ne sont que des habitudes. Apparemment tu l'as placé après la déclaration de toutes les fonctions que tu y utilises, ton raisonnement se vaut mais comme PHP détermine si une fonction existe seulement au moment où elle est appelée ce n'est pas une obligation Bonne continuation.
Damien L Posté 20 Avril 2008 Auteur Posté 20 Avril 2008 Merci pour ton aide ! Pas mal le coup du chr() Concernant ta classe, après une lecture en diagonale, je ne vois rien à redire, elle me semble correcte. Bienvenue dans la POO wink.gifLe seule truc que je constate, c'est que tu as placé le constructeur de la classe au milieu du code, personnellement je le place après la déclaration des propriétés, mais ce ne sont que des habitudes. Apparemment tu l'as placé après la déclaration de toutes les fonctions que tu y utilises, ton raisonnement se vaut mais comme PHP détermine si une fonction existe seulement au moment où elle est appelée ce n'est pas une obligation wink.gif Oui, ta logique se tiens aussi La mienne est la suivante, je regroupe les matériaux et après je construis
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant