2011-03-25 15 views

Respuesta

19

No, por supuesto que no. Entonces ellos no serían "constantes".

+3

Usted puede en realidad: http://php.net/manual/en/function.runkit-constant-redefine.php>: D – porges

+12

@Porges Heh. No llamaría a Runkit "redefinir" tanto como "golpear el lenguaje en una pulpa sangrienta". – ceejayoz

+4

La extensión PECL no viene incluida con php, por lo que tendría que instalar la extensión runkit. Hacer algo como esto también es malo ... esto es probablemente algo que usarías para probar/comparar código u otras cosas similares pero/nunca/en producción (lo mismo con la reflexión). –

2

Primero: No, no es posible redefinir las constantes de clase. Es imposible en cada idioma, porque de lo contrario una constante no sería constante.

Pero lo que está haciendo es posible, porque no redefine una constante de clase, sino que define una constante única para cada clase.

+0

runkit no es núcleo PHP. Entonces, sí, puede redefinir constantes, pero solo si instala una extensión PECL. –

+0

Ya sea que haya o no haya hacks: no me siento cómodo al sugerir malas ideas. – KingCrunch

+2

Runkit no es un truco, es una herramienta. –

1
<?php 

class B { 
    const C_ThisIsAConstant = 1; 
} 

class A extends B { 
    const C_ThisIsAConstant = 2; 
} 

var_dump(A::C_ThisIsAConstant); 

emite int(2).

http://codepad.org/GQR9HI5M

+5

Eso no redefine 'B :: C_ThisIsAConstant'. – BoltClock

3

No se puede volver a definir "constantes", ya que son contant.

Si usted está tratando de cambiar una constante definida en un archivo incluido, a continuación, puede definiendo la constante antes de que la incluyen:

define ("PROCESS_NAME", "MIKE"); 
/* ... code ... */ 
include ("/path/to/included_file.php"); // also defines "PROCESS_NAME" 
/* ... code ... */ 

process_name será "Mike".

+0

Después de leer numerosas respuestas en SO, la mayoría de las cuales predican o declaran lo obvio, esta es por mucho la respuesta más útil para mí: solucionó el problema (con la popular biblioteca de códigos de otra persona en la que no quiero profundizar). Casi ignoro esta respuesta debido a la declaración de apertura que no solo encaja en la categoría de obsequios/obvio, sino que también es incorrecta. Menos sería más en este caso. – DaveWalley

Cuestiones relacionadas