¿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.
¿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.
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.
Estás en lo correcto. No puede usar un especificador de acceso con const ni modificar a través de la reflexión. – webbiedave
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.
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;
}
A partir de php7.1, puede definir sus constantes de clase con modificadores de acceso (public
, o private
protected
). 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
Cuál es la razón para que se oculta? Aunque son públicos, solo son de lectura. – zerkms
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
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