2010-12-22 31 views
39

¿Estoy en lo correcto al asumir que las propiedades de const son automáticamente públicas? ¿Hay alguna manera de hacerlos privados o protegidos?Constantes de clase PHP: ¿públicas, privadas o protegidas?

Gracias de antemano.

+6

Cuál es la razón para que se oculta? Aunque son públicos, solo son de lectura. – zerkms

+2

Las constantes deben ser públicas, porque deben describir hechos inmutables acerca de la clase, no el estado o la misma. Entonces no tiene sentido esconderlos. – StasM

+0

Podría falsificarlos en versiones futuras con '__getStatic'. En general, es cuestionable si necesita modificadores de acceso en todos los lenguajes de scripting. (Javascript/Python está mucho más orientado a objetos, no los necesita.) – mario

Respuesta

33

Sí, son accesibles globalmente siempre que se cargue la clase. Por lo que sé, no se puede modificar la accesibilidad de las constantes de clase en PHP.

+1

Estás en lo correcto. No puede usar un especificador de acceso con const ni modificar a través de la reflexión. – webbiedave

19

Las constantes de clase deben tener la opción de ser privadas/protegidas porque ser público expone los detalles internos de la clase que otras clases/códigos pueden usar erróneamente pensando que están bien para usar porque son públicos.

Sería bueno saber que el cambio de una constante privada SÓLO afectará a la clase en la que está definida. Lamentablemente no tenemos esa opción.

Recuerda cuando aprendiste Object Design & Análisis ... le das a los métodos de clase y atributos el acceso más RESTRICTIVO posible, y luego los relajas cuando es necesario (mucho más difícil volver al revés porque otras clases/código empiece a usarlos, lo que rompería otro código).

Solución

La mejor opción es simplemente crear una variable privada o protegida y mayúsculas para indicar que es una constante. Siempre se puede crear una clase llamada constant ($ value_to_be_constant) que implemente los métodos mágicos/interfaces spl correctos para evitar que se modifique.

+4

Yay para phishing de PHP. +1 –

+0

Además, si PHP quiere convertirse en un lenguaje de programación "serio" con OOP, debe cambiarlo como sugirió. – Srneczek

+1

La mejor opción es simplemente crear una variable ** 'static' ** privada o protegida ... – Pang

5

Soy consciente de esta pregunta es de 6 años de edad

PHP 7.1 (actualmente RC1) permite especificar la visibilidad de las constantes de clase.

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; 
} 

Otros detalles

2

A partir de php7.1, puede definir sus constantes de clase con modificadores de acceso (public, o privateprotected). Echar un vistazo al siguiente ejemplo:

<?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éditos: http://dwellupper.io/post/48/defining-class-constants-in-php

Cuestiones relacionadas