57 votes

Constantes de classe PHP - publiques, privées ou protégées ?

Ai-je raison de supposer que les propriétés constantes sont automatiquement publiques ? Existe-t-il un moyen de les rendre privées ou protégées ?

Merci d'avance.

6 votes

Quelle est la raison de les rendre cachés ? Même s'ils sont publics, ils sont en lecture seule.

2 votes

Les constantes sont censées être publiques, parce qu'elles sont destinées à décrire des faits immuables concernant la classe, et non son état. Il n'y a donc aucun intérêt à les cacher.

0 votes

On pourrait les falsifier dans les futures versions avec __getStatic . En général, on peut se demander si les modificateurs d'accès sont vraiment nécessaires dans les langages de script. (Javascript/Python étant beaucoup plus orientés objet n'en ont pas besoin).

60voto

BoltClock Points 249668

Historiquement, les constantes de classe étaient toujours accessibles publiquement tant que la classe était chargée et il n'y avait aucun moyen de changer cela.

À partir de PHP 7.1, ils restent publics par défaut mais les modificateurs d'accès peuvent maintenant être appliqués . Voici l'exemple tiré des notes de mise à jour :

<?php
class ConstDemo
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}

16voto

Scott Points 191

Les constantes de classe devraient avoir l'option d'être privées/protégées parce que si elles sont publiques, elles exposent des détails internes de la classe que d'autres classes/codes peuvent utiliser par erreur en pensant qu'elles peuvent être utilisées parce qu'elles sont publiques.

Il serait bon de savoir que la modification d'une constante privée n'affecte QUE la classe dans laquelle elle est définie. Malheureusement, nous n'avons pas cette option.

Rappelez-vous quand vous appreniez la conception et l'analyse d'objets... vous donnez aux méthodes et aux attributs des classes l'accès le plus RESTRICTIF possible, puis vous les assouplissez si nécessaire (il est beaucoup plus difficile de revenir en arrière parce que d'autres classes/codes commencent à les utiliser, ce qui casserait d'autres codes).

SOLUTION DE RECHANGE

Le mieux est de créer une variable privée ou protégée et de la mettre en majuscule pour indiquer qu'il s'agit d'une constante. Vous pouvez toujours créer une classe appelée constant($value_to_be_constant) qui implémente les méthodes magiques / interfaces spl correctes pour empêcher qu'elle soit modifiée.

6voto

mrok Points 1664

Je suis conscient que cette question date de 6 ans

Php 7.1 (actuellement RC1) permet de spécifier la visibilité des constantes de classe.

class Token {
        // Constants default to public
        const PUBLIC_CONST = 0;

        // Constants then also can have a defined visibility
        private const PRIVATE_CONST = 0;
        protected const PROTECTED_CONST = 0;
        public const PUBLIC_CONST_TWO = 0;

        //Constants can only have one visibility declaration list
        private const FOO = 1, BAR = 2;
}

Informations complémentaires

3voto

Pranav Rana Points 321

A partir de php7.1 vous pouvez définir les constantes de votre classe avec modificateurs d'accès ( public , private ou protected ). Regardez l'exemple suivant :

<?php
class superheroes{
    public const kal_el = 'Superman';
    protected const bruce_wayne = 'Batman'; # works php7.1 onwards
    private const anthony_stark = 'Iron Man'; # works php7.1 onwards

    public static function show_remaining(){
        echo self::bruce_wayne, '<br />';
        echo self::anthony_stark, '<br />';
    }
}
echo superheroes::kal_el, '<br />';
superheroes::show_remaining();

Crédits : http://dwellupper.io/post/48/defining-class-constants-in-php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X