¿Se puede definir o cambiar una constante en PHP?¿Puedes undefine o cambiar una constante en PHP?
Respuesta
No. Las constantes son constant.
Referencia: php.net/manual/language.constants.php
entonces, ¿PHP fomenta el uso de variables globales para lograr esto? – TheConstantGardener
@TheConstantGardener: No necesariamente. Hay pocos casos en que un buen diseño requiera una variable global. –
¿por qué Wordpress utiliza la palabra clave global en 66 archivos durante 851 veces? – TheConstantGardener
No. Una vez que una constante se define, nunca se puede cambiar o indefinido.
Esto es incorrecto. La extensión runkit (como se menciona en otra respuesta) lo ha permitido desde PHP 4. Más recientemente, la extensión uopz también lo permite desde PHP 5.4. –
Si es absolutamente necesario para hacer esto (aunque yo no lo recomendaría como otros han dicho) siempre se puede utilizar Runkit.
http://www.php.net/manual/en/function.runkit-constant-redefine.php
http://www.php.net/manual/en/function.runkit-constant-remove.php
Tonterías como esta es una de las razones por las cuales hay tanto código PHP malo por ahí. Subvertir los constructos de lenguaje de tal manera es una idea terrible, y se refleja pobremente en el desarrollador que lo hace. –
Runkit es una extensión PHP opcional, que nunca he visto instalada en ningún host web. – gnud
@George Cummins Estoy de acuerdo contigo allí! Aún así, el OP no mencionó lo que estaban haciendo o por qué deseaban desarmar/redefinir las constantes, y otros pueden estar buscando algo como Runkit para algunas cosas muy experimentales de piratería de idiomas, así que pensé en publicarlo. –
Los otros carteles son correctos - no se puede hacer esto. Pero tal vez puedas mover tu definición al punto donde sepas cuál sería el mejor valor para la constante.
Tal vez se está definiendo constantes en una gran lista:
define('STRING1','Foo');
define('STRING2', 'Bar');
define('STRING3', 'Baz');
y que desea cambiar el valor de STRING2 vez que se descubre una condición. Una forma sería postergar la definición hasta que conozca la configuración correcta.
define('STRING1','Foo');
// define('STRING2', 'Bar'); -- wait until initialization
define('STRING3', 'Baz');
...
if (condition) {
define('STRING2', 'Bar type 2');
} else {
define('STRING2', 'Bar type 1');
}
La lógica de ajuste STRING2 podría incluso estar en un archivo diferente, más tarde en su procesamiento.
Sé que es tarde para el juego ... pero aquí es una cosa que puede ayudar a algunas personas ...
En mi archivo "Application.php" (donde defino todos mis constantes e incluir en todos mis scripts) que hago algo como esto:
if(!defined("LOGGER_ENABLED")){
define("LOGGER_ENABLED", true);
}
Así que normalmente, cada guión va a obtener registro habilitado ... pero si en un script en particular no quiero este comportamiento simplemente me puedo hacer esto antes Incluyo mi Application.php:
define("LOGGER_ENABLED", false);
Sin ver toda su aplicación esto puede ser una suposición injusta, pero "anular" su propio sistema suena un poco hacky. ¿No puedes rediseñar tu aplicación/framework para administrar mejor si Logger debería estar habilitado o no basado en algo más específico o lógico? Tal como están las cosas, esto suena muy complicado de usar y administrar, y sobre todo para algo que suena como que se usa con poca frecuencia. Es una respuesta válida que agrega información potencialmente útil para la pregunta, por lo que no baja el voto, pero potencialmente promueve malas prácticas. – James
@patrick, sí, pero ¿y si alguien quiere cambiar el valor que ya están configurados, por eso creo que la respuesta de Nils Luxton es la que mejor se adapta a ella? Espero que te acuerdes de mí. –
Esto debe aceptarse porque ofrece una solución que funciona. También es una práctica habitual en, por ejemplo. C codificación, por lo que no veo que sea un problema para ser utilizado en PHP – Sinisa
Como no se menciona en ninguna otra parte, la extensión uopz permite borrar una constante mediante uopz_undefine(), para PHP 5.4+.
Votantes abajo: Si lo que escribí es incorrecto, ¡POR FAVOR DIGA o corrija! –
- 1. ¿Puedes cambiar las sesiones de PHP en una sesión?
- 2. ¿Cómo undefine una variable en Scheme?
- 3. ¿Puedes guardar una matriz PHP en Memcache?
- 4. Constante de clase en una cadena en PHP
- 5. ¿Puedes usar HipHop PHP para construir una extensión de php?
- 6. PHP - usar una matriz constante como clase
- 7. ¿Puedes 'salir' de un bucle en PHP?
- 8. ¿Puedes renderizar un archivo PHP en una variable?
- 9. Cambiar constante de cadena en una clase compilada
- 10. variable o constante?
- 11. ¿Puedes tener clases anidadas en PHP?
- 12. ¿Puedes registrar errores php en varios archivos?
- 13. PHP Constante posible más grande
- 14. Definición de constante de clase en PHP
- 15. ¿Hay alguna manera de definir una matriz constante en PHP?
- 16. Nombre de la constante dinámica en PHP
- 17. En Xcode4, ¿puedes cambiar los caracteres utilizados para mostrar invisibles?
- 18. PHP: constante como variable en la función
- 19. ¿Puedes extender dos clases en una clase?
- 20. ¿Puedes lanzar una matriz en lugar de una cadena como una excepción en php?
- 21. ¿Puedes cambiar el padre de un widget en python tkinter?
- 22. ¿Cómo puedo concatenar una constante y una variable y almacenarla en una constante de clase con PHP?
- 23. ¿Para qué puedes usar una estructura o unión sin nombre?
- 24. PHP 'instanceof' falla con constante de clase
- 25. Cambiar endianness en PHP
- 26. visibilidad constante de la clase php
- 27. Constante de PHP dentro del archivo JS
- 28. ¿Puedes reutilizar un conjunto de resultados mysql en PHP?
- 29. Objeto PHP o una matriz
- 30. Error de PHP - Constante DB_HOST ya definido?
En otras palabras, ¿quieres que una constante sea una variable? Puede que quieras pensar en esto por un tiempo más. –
@MarcB pero apropiado, dado el nombre de usuario de OP. – abligh
@MarcB El OP claramente reconoció la ironía de la pregunta (él/ella hizo una cuenta solo para publicar esta pregunta), pero lo planteó seriamente. Suena más razonable planteado como _ "¿Se puede definir una de las cosas que los creadores de PHP decidieron llamar 'constantes'?" _ –