Page 1 sur 1

Utiliser des constantes en arguments de fonctions/méthodes

Posté : 12 nov. 2007, 14:15
par jojolapine
Bonjour à tous,
Tout d'abord, désolé si je fait un doublons, mais je ne retrouve pas le sujet qui parlait de mon problème...
Alors en fait, j'ai souvent vu dans les fonctions php de bases des parmètres optionnels sous forme de constantes, exemple au hasard: glob()
où on peut écrire par exemple:
$files = glob("*.txt",GLOB_MARK);
Cette manière de faire est à mon avis beacoup plus lisible et compréhensible qu'un chiffre et plus élégante qu'un chaine de caractère...
Ma question est la suivante, comme faire pour implémenter ce genres de paramètres dans une classe,
imaginons que je veuille écrire dans mon code:
$instance=new maClasse('./path/file.ext',GET_DIR);
Bon l'exemple est bidon et ne veut rien dire, mais où dois-je déclarer ma constante GET_DIR?
Merci d'avance pour vos réponses ;)

Posté : 12 nov. 2007, 14:34
par Jules Petibidon
Hello,

Ton avis est pas erroné étant donné que les constantes ont un peu été faites pour cela ;)

Pour ce qui est de les déclarer, tout dépend de l'importance et de la polyvalence de ces constantes.
Si tu te sers de constantes comme flags de fonctions, le mieux est de les déclarer dans les fichiers définissant ces fonctions.

Autrement tu peux aussi définir des constantes de classes avec le mot clé const. En terme de lisibilité c'est assez pratique pour identifier les classes auxquelles ces constantes se rapportent et faciliter la lecture du code.

Posté : 12 nov. 2007, 16:52
par Hubert Roksor
Dans le cas présent, c'est définitivement vers une constante de classe que je m'orienterais.

Au fait, inutile de poster des liens complets vers les fonctions PHP, il suffit juste de citer la fonction avec les parenthèses. Si tu postes un lien vers le manuel, merci d'omettre la langue de façon, ça fout en l'air mes préférences à chaque fois :lol:

Posté : 12 nov. 2007, 18:26
par jojolapine
Merci pour vos réponses et désolé Hubert pour le lien, je le referai plus... :oops: :langue:
Donc pour mon soucis, je peux pas tester aujourd'hui, dsl mais ça ressemblerai à ça:
<?php
class test(){
    
    const MA_CONSTANTE=1; //n'importe quel chiffre?
    const MA_CONSTANTE_2=13; //n'importe quel chiffre?

    public function __construct($arg1,$opt){
        echo '$arg1='.$arg1;
        if($opt==MA_CONSTANTE){
              //oihfzefep
        } elseif($opt==MA_CONSTANTE_2){
             //ozeifhzeoifh
        }
    }
}

$instance=new test('blabla',MA_CONSTANTE);
?>
ça ne me fera pas un undefined constante....?

Posté : 12 nov. 2007, 18:54
par Jules Petibidon
Pas tout à fait,

Depuis l'intérieur de ta classe, tu peux utiliser le mot clé self pour accéder à ta constante. A l'extérieur de ta classe, tu dois passer par nom_classe::CONSTANTE.

Cela a l'avantage de te permettre de définir des constantes de même nom dans des classes différentes sans que cela te pose de problèmes de "collisions"
<?php
class test(){
    
    const MA_CONSTANTE=1; //n'importe quel chiffre?
    const MA_CONSTANTE_2=13; //n'importe quel chiffre?

    public function __construct($arg1,$opt){
        echo '$arg1='.$arg1;
        if($opt==self::MA_CONSTANTE){
              //oihfzefep
        } elseif($opt==self::MA_CONSTANTE_2){
             //ozeifhzeoifh
        }
    }
}

$instance=new test('blabla', test::MA_CONSTANTE);
?>

Posté : 12 nov. 2007, 21:43
par naholyr
Un autre truc intéressant c'est que les constantes peuvent être surchargées lors de l'héritage comme n'importe quelle méthode ou attribut.

Posté : 13 nov. 2007, 13:27
par jojolapine
donc en gros il n'y a pas possibilité d'utiliser une syntaxe du genre
$instance->methode('arg',CONSTANTE); // sans le self
à part si je déclare les constantes hors de la classe(ce que je ne souhaite pas)?

Donc je vais utiliser la syntaxe self::CONSTANTE et ça devrais bien aller comme ça...
Mais par curiosité, comment son gérée les constantes par exemple sur pdo?
On à pas besoin de mettre pdo::CONSTANTE?