J'ai été surpris de voir que ce qui suit ne fonctionne pas comme prévu. sorties: quelle est la valeur de {const_test} va être? p> Existe-t-il un moyen de résoudre les constantes dans les bretelles bouclées? P> Oui, je suis au courant que je pouvais juste faire p> mais je préférerais ne pas concataner cordes, pas tellement pour la performance mais pour la lisibilité. P> p>
4 Réponses :
Nope non possible car php considérera const_test code> être une simple chaîne
echo "What is the value of ".CONST_TEST." going to be?";
Merci pour l'explication, je pensais que php résoudrait tout à l'intérieur des bretelles bouclées. Mais je vois que cela ne fonctionne que pour $ variables.
Ouais. Cela ne fonctionnera que pour quelque chose en commençant par un $. Par exemple. {classe :: static} code> ne fonctionne pas non plus :(
Je ne comprends pas pourquoi vous devez faire une grosse histoire, mais vous pouvez toujours faire:
define('CONST_TEST','Some string'); $def=CONST_TEST; echo "What is the value of $def going to be?";
Je ne pensais pas que je faisais une grosse fouille, juste la curiosité :)
Dans mon cas, j'ai généré des fichiers avec toutes nos noms de la colonne de données et de la table en tant que constantes de classe. Je dois actuellement créer une variable distincte pour chaque constante dans chaque fonction que je l'utilise. C'est ce que je finis par faire, mais c'est très ennuyeux
Cela peut ne pas être possible, mais étant donné que votre objectif est la lisibilité, vous pouvez utiliser Sprintf / Printf pour une meilleure lisibilité que la concaténation à la chaîne.
define('CONST_TEST','Some string'); printf("What is the value of %s going to be?", CONST_TEST);
joli! n'a pas pensé à ça
Si vous le souhaitez vraiment mal, vous pouvez écrire un petit code à l'aide de la réflexion qui trouve toutes les constantes et leurs valeurs. Ensuite, les définit à l'intérieur d'une variable comme Ainsi, il ressemblerait: P> $ Constantes ['Constant_Name'] ... CODE> Cela voudrait alors signifier si jamais vous souhaitez mettre une constante dans une chaîne que vous pouvez utiliser {}. Aussi, plutôt que de les ajouter à
$ constantes code>, faites-en une classe qui implémente ArrayAccess afin que vous puissiez appliquer que les valeurs utilisées ne peuvent en aucun cas être modifiées (seuls les nouveaux éléments ajoutés à l'objet qui peut être accessible en tant que tableau).
$CONSTANTS = new constant_collection();
//this bit would normally be automatically populate using reflection to find all the constants... but just for demo purposes, here is what would and wouldn't be allowed.
$CONSTANTS['PI'] = 3.14;
$CONSTANTS['PI'] = 4.34; //triggers an error
unset($CONSTANTS['PI']); //triggers an error
foreach ($CONSTANTS as $name=>$value) {
.... only if the correct interface methods are implemented to allow this
}
print count($CONSTANTS); //only if the countable interface is implemented to allow this
print "PI is {$CONSTANTS['PI']}"; //works fine :D
Si cela ne fonctionne pas, cela ne fonctionne pas. Résoudre en changeant la source PHP et en recompilant. :-)
Même moins lisible si
{const_test} code> est à l'intérieur de la chaîne. Utiliser plutôt une concaténation.
STEREOFROG: Ouais, PHP est plein de fonctionnalités de hacker, de sympathie de syntaxe et d'écriture-what-you-you-thec-thing-the-thing-the-the-the-thing thing thing-the-the - vous serez surpris!