Existe-t-il un moyen en PHP d'inclure une constante dans une chaîne sans concaténation?
define('MY_CONSTANT', 42);
echo "This is my constant: MY_CONSTANT";
php
string
constants
concatenation
Brian
la source
la source
Réponses:
Non.
Avec les chaînes, il n'y a aucun moyen pour PHP de distinguer les données de chaîne des identifiants constants. Cela vaut pour tous les formats de chaînes en PHP, y compris heredoc.
constant()
est une autre façon de récupérer une constante, mais un appel de fonction ne peut pas non plus être placé dans une chaîne sans concaténation.Manuel sur les constantes en PHP
la source
define('ANIMAL','turtles'); $constant='constant'; echo "I like {$constant('ANIMAL')}";
Oui c'est (d'une certaine manière;)):
Ce n'est probablement pas ce que vous visiez, mais je pense que, techniquement, ce n'est pas une concaténation mais une substitution et à partir de cette hypothèse, il inclut une constante dans une chaîne sans concaténation .
la source
Pour utiliser des constantes dans des chaînes, vous pouvez utiliser la méthode suivante:
Comment cela marche-t-il?
Vous pouvez utiliser n'importe quel nom de fonction de chaîne et des paramètres arbitraires
On peut placer n'importe quel nom de fonction dans une variable et l'appeler avec des paramètres dans une chaîne entre guillemets. Fonctionne également avec plusieurs paramètres.
Produit
Fonctions anonymes aussi
Vous pouvez également utiliser des fonctions anonymes à condition que vous exécutiez PHP 5.3+.
Produit un code HTML correctement échappé comme prévu.
Les tableaux de rappel ne sont pas autorisés!
Si à présent vous avez l'impression que le nom de la fonction peut être appelable, ce n'est pas le cas, car un tableau qui renvoie true lorsqu'il est passé à
is_callable
provoquerait une erreur fatale lorsqu'il est utilisé dans une chaîne:Gardez à l'esprit
Cette pratique est peu judicieuse, mais aboutit parfois à un code beaucoup plus lisible, c'est donc à vous - la possibilité est là.
la source
$_ = create_function('$a','return $a;'); $s = "I like {$_(ANIMAL)}"
. La version de Thetaiko supprime le besoin de citations, et un trait de soulignement est mignon.la source
la source
Si vous voulez vraiment faire écho à une constante sans concaténation, voici la solution:
note : dans cet exemple, echo prend un certain nombre de paramètres ( regardez les virgules ), donc ce n'est pas une vraie concaténation
L'écho se comporte comme une fonction, il prend plus de paramètres, il est plus efficace que la concaténation, car il n'a pas besoin de concaténer puis d'écho, il fait juste écho à tout sans avoir besoin de créer un nouvel objet concaténé String :))
ÉDITER
De plus, si vous envisagez de concaténer des chaînes, de passer des chaînes en tant que paramètres ou d'écrire des chaînes entières avec " , The , (version virgule) est toujours le plus rapide, ensuite . (Concaténation avec ' guillemets simples) et la méthode de construction de chaînes la plus lente utilise des guillemets doubles " , car les expressions écrites de cette façon doivent être évaluées par rapport aux variables et fonctions déclarées.
la source
Vous pourriez faire:
la source
Le moyen le plus simple est
Une autre façon d'utiliser
(s)printf
la source
Comme d'autres l'ont souligné, vous ne pouvez pas faire cela. PHP a une fonction
constant()
qui ne peut pas être appelée directement dans une chaîne, mais nous pouvons facilement contourner ce problème.et un exemple de base sur son utilisation:
la source
$constant = 'constant';
au lieu de définir une autre fonction, et cela fonctionnerait de la même manière puisque cette fonction existe déjà.Voici quelques alternatives aux autres réponses, qui semblent se concentrer principalement sur l'astuce "{$}". Bien qu'aucune garantie ne soit faite sur leur vitesse; tout cela est du sucre syntaxique pur. Pour ces exemples, nous supposerons que l'ensemble de constantes ci-dessous a été défini.
Utiliser extract ()
Celui-ci est sympa car le résultat est identique aux variables. Commencez par créer une fonction réutilisable:
Puis appelez-le depuis n'importe quelle portée:
Ici, il minuscule les constantes pour être plus facile sur vos doigts, mais vous pouvez supprimer le array_change_key_case () pour les garder telles quelles. Si vous avez déjà des noms de variables locales en conflit, les constantes ne les remplaceront pas.
Utilisation du remplacement de chaîne
Celui-ci est similaire à sprintf (), mais utilise un seul jeton de remplacement et accepte un nombre illimité d'arguments. Je suis sûr qu'il existe de meilleures façons de le faire, mais pardonnez ma maladresse et essayez de vous concentrer sur l'idée derrière cela.
Comme avant, vous créez une fonction réutilisable:
Puis appelez-le depuis n'importe quelle portée:
Vous pouvez utiliser n'importe quel jeton de remplacement de votre choix, comme un% ou un #. J'ai utilisé la barre oblique ici car c'est un peu plus facile à taper.
la source
Il est amusant que vous puissiez utiliser le mot-clé 'const' comme nom pour votre fonction pour éviter les déchets d'espace de noms:
Vous pouvez également utiliser $ GLOBALS pour propager la fonction 'const' dans tout le code:
Je ne sais pas s'il est sans danger pour une utilisation future. Et ce qui est pire, c'est toujours moche.
la source
Je pense que cela répond à la question initiale du PO. La seule chose est que la clé d'index global semble ne fonctionner qu'en minuscules.
Production:
la source
an associative array containing references to all variables
.$db_user = 'root';