2011-12-11 18 views
24

¿Es posible redefinir una constante en php que fue definida por la función define? Tengo una clase con varias constantes que contiene los datos del usuario. Estoy tratando de usar la clase para más de un usuario.Redefinición de constantes en PHP

define('ALLEGRO_ID', 'id'); 
define('ALLEGRO_LOGIN', 'login'); 
define('ALLEGRO_PASSWORD', 'passwd'); 
define('ALLEGRO_KEY', 'key'); 
define('ALLEGRO_COUNTRY', 123); 

$allegro = new AllegroWebAPI();     
$allegro -> Login(); 

No escribí esta clase, pero la estoy usando debido a limitaciones de tiempo. No sé por qué el creador de esta clase defined los datos del usuario en lugar de utilizar las variables en la instancia.

Sé que las constantes deben ser constantes (¡obviamente!), Pero estoy buscando un truco para redefinirlas.

+9

Esto suena como algo que debería ser resuelto de otra manera que sea mejor arquitectónicamente. –

+0

las constantes que contienen los datos del usuario suenan raras –

+9

Hasta el siguiente: 'define (4, 42);' – Zirak

Respuesta

53

Si ha instalado el runkit extension, puede utilizar runkit_constant_redefine():

runkit_constant_redefine("name", "value"); 

En la mayoría Sin embargo, sería una mejor idea volver a evaluar por qué está usando constantes y no algo más apropiado.

+1

También hay [uopz] (http://php.net/manual/en/book.uopz.php) extensión de PHP que tiene una función similar: [uopz_redefine] (http : //php.net/runkit_constant_redefine). 'uopz_redefine()' permite redefinir también las constantes de clase. – matt

20

No, no puede redefinir una constante (excepto con runkit_constant_redefine),
por eso se llama CONSTANTE.

Lo que se busca en la clase es en realidad una variable de objeto en formato de matriz: -

class user 
{ 
    public $user = array(); 

    function load($user_id) 
    { 
    // etc 
    $this->$user[$user_id] = something_else; 
    } 
} 
+7

En otras palabras, la respuesta es 'Sí'. – DaveWalley

+1

Respuesta corta: No. Respuesta larga: Sí. Respuesta más larga: runkit_constant_redefine. – Cullub

+2

Respuesta corta: no deberías. Respuesta larga: puedes, pero todavía no deberías. Respuesta más larga: puedes con este truco, pero todavía no deberías hacerlo. Lo que estás buscando es una constante inconstantemente variable;) – Edward

2

El valor de constantes una vez definido permanece sin cambios a lo largo del programa. Si tiene ese requisito y desea cambiar los valores en el futuro, conserve dichos valores en las variables de PHP.

0

En PHP 5.6+, puede importar constantes, bajo un alias. Tal alias puede sobreescribir una constante ya existente.

el siguiente fragmento se imprimirá int(5):

define('ALLEGRO_ID', 3); 
define('NEW_ALLEGRO_ID', 5); 
use NEW_ALLEGRO_ID as ALLEGRO_ID; 
var_dump(ALLEGRO_ID); 

Tal mecanismo podría ser legítimo en la unidad de prueba, u otras zonas donde se tolera el comportamiento de la magia, pero no es conveniente para su caso de uso, donde una clase de almacenar su configuración de usuario sería más útil.

Finalmente, este comportamiento permite crear situaciones muy confusas como use const true as false;.

Cuestiones relacionadas