Version complète: sur le forum Webmaster Hub : Pas de retour à la ligne
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Damien L
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 sad.gif

Je vous met la méthode en question :

CODE
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
CODE
$log_ligne .= ' '.$log_message.'\n';


Des idées ?
TheRec
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 :
CODE
$log_ligne .= " ".$log_message."\n";

Bonne continuation.
Damien L
Super, c'est ça !!!

Je pouvais chercher longtemps nonono.gif

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.
TheRec
CITATION(Damien L @ samedi 19 avril 2008 à 22:16) *
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 :
CODE
$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 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

Bonne continuation.
Damien L
Merci pour ton aide !

Pas mal le coup du chr() a_thumbsup_20.gif

CITATION
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 smile.gif

La mienne est la suivante, je regroupe les matériaux et après je construis wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.