12
votes

Est-il possible de redéfinir les constantes PHP?

est-il possible de redéfinir les constantes de classe (en PHP)?

E.g. P>

class B {
const C_ThisIsAConstant = 1;
}

class A extends B {
 self::C_ThisIsAConstant = 2;
}


1 commentaires

Vous demandez une variable constante. Qu'une contradiction en termes ;-)


5 Réponses :


18
votes

Non, bien sûr pas. Ensuite, ils ne seraient pas "constantes".


5 commentaires

Vous pouvez en réalité: PHP.net/manual/fr/function.Runkit- Constant-Redefine.php >: D


@Ports heh. Je n'appellerais pas Runkit "redéfinir" tant que "battant la langue dans une pulpe sanglante".


L'extension PECL n'est pas fournie avec PHP. Vous devez donc installer l'extension Runkit. Faire quelque chose comme ça est aussi mauvais ..C'est probablement quelque chose que vous utiliseriez pour tester / analyser le code ou d'autres choses, mais / jamais / dans la production (identique à la réflexion).


La réflexion peut être utilisée par exemple pour RPC. Cependant, il y a aucune raison de redéfinir les constantes, en particulier avec de tels hacks.


Même si cela est accepté, c'est faux - la réponse est «oui».



2
votes

Premier: Non, il n'est pas possible de redéfinir les constantes de classe. Son impossible dans chaque langue , car sinon une constante ne serait pas constante.

Mais ce que vous faites est possible, car vous ne redéfinissez pas une constante de classe, vous définissez plutôt une constante unique pour chaque classe.


3 commentaires

runkit n'est pas phon php. Donc, oui, vous pouvez redéfinir les constantes - mais seulement si vous installez une extension pecl.


Qu'il y ait ou non des hacks: je ne me sens pas à l'aise de suggérer de mauvaises idées.


Runkit n'est pas un piratage, c'est un outil.



1
votes
<?php

class B {
    const C_ThisIsAConstant = 1;
}

class A extends B {
    const C_ThisIsAConstant = 2;
}

var_dump(A::C_ThisIsAConstant);
It outputs int(2).http://codepad.org/GQR9HI5M

1 commentaires

Cela ne redéfinit pas b :: c_thisisaconstant .



4
votes

Vous ne pouvez pas redéfinir les "constantes" car ils sont en tentant.

Si vous essayez de changer une constante définie dans un fichier inclus, vous pouvez définir la constante avant l'inclusion: p>

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


1 commentaires

Après avoir lu de nombreuses réponses à ce sujet, dont la plupart prêchent ou énoncez l'évidence, c'est de loin la réponse la plus utile pour moi - elle a fixé le problème (avec la bibliothèque de code populaire de quelqu'un d'autre que je ne veux pas creuser). J'ai presque négligé cette réponse en raison de la déclaration liminaire qui convient non seulement à la catégorie prêchée / évidente, mais est également incorrecte. Moins serait plus dans ce cas.



0
votes

J'ai publié mon cadre yapaf sur github.com. Appelons-le alpha-état. Quoi qu'il en soit, Yapaf est capable de changer la valeur d'une classe constante (voir ).


0 commentaires