Aller au contenu

Sujets conseillés

Posté (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é par Damien L
Posté (modifié)

Super, c'est ça !!!

Je pouvais chercher longtemps :nonono:

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
<?PHP

class 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é par TheRec
Posté
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.

Posté

Merci pour ton aide !

Pas mal le coup du chr() :thumbsup:

Concernant ta classe, après une lecture en diagonale, je ne vois rien à redire, elle me semble correcte. Bienvenue dans la POO wink.gif

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 wink.gif

Oui, ta logique se tiens aussi :)

La mienne est la suivante, je regroupe les matériaux et après je construis ;)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...