Variable composée

Petit nouveau ! | 4 Messages

25 févr. 2022, 22:44

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....)

Petit nouveau ! | 4 Messages

26 févr. 2022, 07:53

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";
|*()

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 févr. 2022, 13:20

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 :-)
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 4 Messages

26 févr. 2022, 14:58

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:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 févr. 2022, 18:19

$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
Quand tout le reste a échoué, lisez le mode d'emploi...