Constante en POO interne ou externe

Répondre
laura
le 25/09/2009 à 15:55
laura
Bonjours à tous,
J'ai une petite question pour les pro de la POO en php

j'ai une constante
<?php
define('DEBUG',true);
?>

j'aimerais savoir s'il est préférable de faire

<?php
class a
{
public function __construct(){}
public function machin()
{

if(DEBUG)
{
//ici quelque chose
}
}
}
?>

ou bien
<?php
class a
{
private
$_debug;
public function __construct($debug=false)
{
$this->_debug=$debug;
}
public function machin()
{

if($this->_debug)
{
//ici quelque chose
}
}

}
?>

Et pourquoi l'un ou l'autre?!
Merci d'avance de vos réponses
Des étoiles dans les yeux, le ciel pour m'évader
LA GLOBULE
le 25/09/2009 à 17:11
LA GLOBULE
Tout dépend du role de ton 'debug'.

Si il s'agit d'un debug uniquement pour cette classe, tu peux utiliser la méthode 2.
Si il s'agit d'un debug général du site, la première solution semble plus appropriée.

Mais les deux sont complémentaires. tu pourrais avoir par exemple :

<?php
define('DEBUG',true);

class a
{
private
$_debug;
public function __construct($debug=false)
{
$this->_debug=$debug;
}
public function machin()
{

if($this->_debug)
{
//ici quelque chose
}
if (DEBUG) {
// ici quelque chose d'autre en plus
}
}

}
?>
laura
le 25/09/2009 à 17:28
laura
Re bonjours,
Il s'agit d'une variable générale de débug. Utilisé un peu partout sur le site.
Elle est utilisée uniquement en phase de test. Puis placée à false ensuite.
Donc ma première méthode est la bonne si j'ai bien comprit. Je garde ma constante en l'utilisant comme tel dans mes classes
Des étoiles dans les yeux, le ciel pour m'évader
LA GLOBULE
le 25/09/2009 à 18:10
LA GLOBULE
Oui, c'est ce que je ferais (et que je fais églamenent).

L'avantage aussi d'une vraie constante (et pas un attribut privé), c'est que par définition c'est constant, ton script ne peut pas la modifier :)
laura
le 25/09/2009 à 18:23
laura
C'est pas faux. Il est mieux de garder une vraie constante. C'est plus sûr niveau sécurité.
Merci de ton aide, c'est très gentil
Des étoiles dans les yeux, le ciel pour m'évader
LupusMic
le 08/10/2009 à 20:14
LupusMic
Tiens donc, j'étais passé à côté de cette discussion. Il y a une autre solution. Pour un DEBUG général, ce n'est pas pertinent, mais si tu en as besoin pour déclarer des constantes qui prennent leur place dans une classe, tu as le mot-clé const. D'ailleurs, à partir de PHP 5.3, on peut utiliser le mot-clé const.
<?php

const DEBUG = true ;

class document
{
const TEXT_NODE_TYPE = 13 ;
}
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
laura
le 08/10/2009 à 21:23
laura
C'est vrai que pour une certaine logique de codage, utiliser const partout c'est pas mal.

Mais à mon sens const et define ne sont pas totalement identique. ça dépend donc du contexte.

define a un 3ème argument optionnel
Des étoiles dans les yeux, le ciel pour m'évader
LupusMic
le 09/10/2009 à 12:01
LupusMic
Rha, ignoble, je ne connaissais pas cette abomination qui permettait de rendre les constantes insensibles à la casse.

La véritable différence entre define et const, depuis PHP53, c'est surtout que const définit des constantes limitées à leur scope, alors que les constantes définies par define seront globales à tout les scopes.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
laura
le 09/10/2009 à 12:32
laura
Je suis d'accord avec toi ^^ C'est peut-être un formalisme de programmation mais pour moi une constante doit être en majuscule.
Des étoiles dans les yeux, le ciel pour m'évader
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours