Page 1 sur 1

Variable composée

Posté : 25 févr. 2022, 22:44
par Hihaho
Bonjour, je cherche depuis un moment mais sans succès comment créer un nom de variable composé....
Je m'explique : j'ai deux variables que je déclare ainsi :
$A = "Ernest";
$C = "Celestine";
j'aimerais composer les deux valeurs pour créer une variable commune $ErnestCelestine à laquelle je pourrais ensuite associer une valeur.
Je ne vois pas comment (ni même si c'est possible) de faire avec les variables dynamiques qui sont un peu opaques pour moi... ou s'il existe un moyen simple mettre le $ devant le mot qu'on veut sans que celui-ci vienne du codeur mais bien du code lui-même...

Je vous confie cette question en espérant qu'elle soit compréhensible.
Merci d'avance pour vos efforts à me comprendre le cas échéant (mais c'est peut-être aussi très simple....)

Re: Variable composée

Posté : 26 févr. 2022, 07:53
par Hihaho
Il semble que je puisse utiliser DEFINE("ErnestCelestine", valeur)
et donc rappeler ErnestCelestine dans une requete mysqli par exemple :
$requete = $connexion->query("SELECT * FROM bd_truc WHERE `colonne` = 'ErnestCelestine'");
seulement mon notepad++ stoppé en plein élan par un exit(ErnestCelestine) m'informe gentiment :
Warning: Use of undefined constant valeur - assumed 'valeur' (this will throw an Error in a future version of PHP) in C:\wamp64/machin.php on line 14

Alors je ne sais pas trop quoi faire... si ce n'est arriver à créer $ErnestCelestine = "valeur";
|*()

Re: Variable composée

Posté : 26 févr. 2022, 13:20
par @rthur
Voici comment faire :
<?php
$A = "Ernest";
$C = "Celestine";
${$A.$C} = "Nouvelle valeur";
var_dump($ErnestCelestine); // Va renvoyer Nouvelle valeur

À noter que c'est presque toujours une mauvaise idée d'utiliser des variables dynamiques, car ça rend le code assez difficilement lisible à posteriori.
C'est très rare d'avoir vraiment besoin de composer des noms de variables, généralement un tableau associatif (multidimensionnel) ou un objet permettent de mieux gérer les cas où on en aurait besoin.

Mais bon, techniquement c'est possible de faire des noms de variables dynamiques :-)

Re: Variable composée

Posté : 26 févr. 2022, 14:58
par Hihaho
Merci @rthur pour ce retour,
Si je vous suis, je me dis que $ErnestCelestine ainsi créée avec ${$A.$C} peut recevoir la valeur que je veux par exemple "pingouin"
Est-ce que la requête indifféremment devient :
$requete = $connexion->query("SELECT * FROM bd_truc WHERE `colonne` = '${$A.$C}'"); ? (ça n'est absolument pas parlant :roll: )

identique à

$requete = $connexion->query("SELECT * FROM bd_truc WHERE `colonne` = '$ErnestCelestine'"); ? (ça c'est variable et donc adaptable)

donc

$requete = $connexion->query("SELECT * FROM bd_truc WHERE `colonne` = 'pingouin'"); ? (ça c'est passe-partout et direct) ?

Je n'ai jamais touché à ces variables dynamiques car je n'en ai jamais eu besoin jusque-là, mais je trouve que les explications ne sont pas évidentes.
Si votre réponse est oui, alors merci, je mettrai la question en résolu, sinon eh bien je me mettrais au travail manuel pour remplacer tous les cas où j'aurais aimé trouver un moyen de rationaliser le code :wink:

Re: Variable composée

Posté : 26 févr. 2022, 18:19
par @rthur
$requete = $connexion->query("SELECT * FROM bd_truc WHERE `colonne` = '${$A.$C}'");
A tester, mais je recommande de faire une concaténation propre quand tu mets des variables au milieu d'une chaine de caractères