¿Es posible redefinir las constantes de clase (en PHP)?¿Es posible redefinir las constantes de PHP?
p. Ej.
class B {
const C_ThisIsAConstant = 1;
}
class A extends B {
self::C_ThisIsAConstant = 2;
}
¿Es posible redefinir las constantes de clase (en PHP)?¿Es posible redefinir las constantes de PHP?
p. Ej.
class B {
const C_ThisIsAConstant = 1;
}
class A extends B {
self::C_ThisIsAConstant = 2;
}
No, por supuesto que no. Entonces ellos no serían "constantes".
Usted puede en realidad: http://php.net/manual/en/function.runkit-constant-redefine.php>: D – porges
@Porges Heh. No llamaría a Runkit "redefinir" tanto como "golpear el lenguaje en una pulpa sangrienta". – ceejayoz
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). –
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.
runkit no es núcleo PHP. Entonces, sí, puede redefinir constantes, pero solo si instala una extensión PECL. –
Ya sea que haya o no haya hacks: no me siento cómodo al sugerir malas ideas. – KingCrunch
Runkit no es un truco, es una herramienta. –
<?php
class B {
const C_ThisIsAConstant = 1;
}
class A extends B {
const C_ThisIsAConstant = 2;
}
var_dump(A::C_ThisIsAConstant);
emite int(2)
.
Eso no redefine 'B :: C_ThisIsAConstant'. – BoltClock
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".
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
He publicado mi framework YAPAF en github.com. Llamémoslo estado alfa. De todos modos, YAPAF puede cambiar el valor de una constante de clase (ver https://github.com/SchulteMarkus/YAPAF/blob/master/tests/ManipulateConstantTest.php).
Está pidiendo una constante variable. Que una contradicción en términos ;-) – Carpetsmoker