2011-03-17 17 views
19

¿Podemos establecer la visibilidad de la clase constante? Para exvisibilidad constante de la clase php

class MyClass { 
    const CONST_VALUE = 'A constant value'; 
} 

para esta clase canwe escribir

public const CONST_VALUE = 'A constant value'; 

o

private const CONST_VALUE = 'A constant value'; 

o

protected const CONST_VALUE = 'A constant value'; 
+5

Tenga en cuenta que hay un RFC para PHP que propone visibilidad constante de clase, consulte [PHP RFC: Visibilidad constante de clase de soporte] (https://wiki.php.net/rfc/class_const_visibility). –

+0

No, esta función de idioma no está presente (aún). Es básicamente la característica de Java conocida como "constantes como variables con niveles de acceso". Encontrará más información sobre esta función de idioma en la RFC "class const visibility" (vea el comentario anterior), en esta respuesta: http: // stackoverflow.com/a/27762041/1163786 y la Solicitud de extracción: https://github.com/php/php-src/pull/1494 –

Respuesta

14

No, no es posible establecer la visibilidad de las constantes en un clase. Ellos son siempre públicos. Vea los comentarios en http://www.php.net/manual/en/language.oop5.constants.php para más información.

+3

Lo encontré por comentario ... Me ayudó ... "Para que nadie piense que esto es de alguna manera una omisión en PHP, simplemente no tiene sentido tener una constante protegida o privada. Los especificadores de acceso identifican quién tiene el derecho de * cambiar * miembros, no quién tiene derecho a leerlos " ** Veo esto como una omisión. No solo son modificadores de acceso, sino que también limitan la visibilidad. Tal como están las cosas, no puedo hacer una constante que sea privada para mi clase, lo que veo como un problema. Me conformaría con múltiples modificadores como const $ var = 'me' privado; pero eso tampoco está permitido. ** –

0

Los modificadores no están permitidos para constantes en php. Puede utilizar

public static $variable = "abc"; 

pero lamentablemente final no está permitido aquí.

3

Una alternativa sería usar un método constante, p. Ej.

private static function gravitationalConstant() { 
    return 9.81; 
} 

Citando Fowler's Refactoring book:

Este idioma es menos familiar para los programadores de base C, pero es muy familiar para Smalltalkers (que no tienen constantes en su idioma). En general, no suelo usar esto en Java, ya que es menos idiomático para el idioma. Sin embargo, si necesita reemplazar el retorno simple con un valor calculado, entonces vale la pena cambiar el campo constante a un método constante. (Supongo que debería haber una refactorización para eso ...)

38

Actualización: los modificadores de visibilidad para las constantes se han agregado en PHP 7.1 (publicado el 1 de diciembre de 2016). Ver el RFC: Support Class Constant Visibility.

La sintaxis es la siguiente:

class ClassName { 
    private const PRIVATE_CONST = 0; 
    protected const PROTECTED_CONST = 0; 
    public const PUBLIC_CONST = 0; 
} 
+0

OP, considere elegir esto como la respuesta correcta, porque el de @Alex ya no es válido a partir de PHP 7.1.0 – thexpand

2

En PHP La última versión (PHP 7.1.0) lo hará disponible.

La sintaxis de muestra fue así.

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

Consulte a continuación el enlace. https://wiki.php.net/rfc/class_const_visibility

Cuestiones relacionadas