Comment obtenir le nom d'une variable

Source : Internet
Auteur : utilisateur
Par exemple, je fournis un service de requête où les utilisateurs peuvent soumettre le nom et l'âge d'une personne comme condition de requête. En supposant que je veux interroger une personne avec un nom appelé laruence, qui est de 27 ans, je pense que la définition de cette personne de la requête symbolique peut être écrite comme: laruence s 27 Malheureusement, Quand un tel tok ..."

Par exemple, j'offre un service de requête, où les utilisateurs peuvent soumettre le nom et l'âge d'une personne comme condition de requête.

Supposons que je vais interroger une personne avec un nom appelé "laruence", un âge de 27 ans, et je pense que la définition de cette personne de jeton requête peut être écrit comme:

laruence s 27
Malheureusement, lorsqu'un tel jeton comme chaîne de requête se soumet au script de traitement du serveur, vous trouverez, "Eh bien, je ne sais pas ce que le nom d'utilisateur est,,,

Eh bien, vous devez écrire ceci:

nom d'utilisateur-laruence-âge-27
Alors, pouvez-vous obtenir le nom d'une variable?

Tout d'abord, du point de vue de la possibilité,

Nous savons qu'en C, tous les symboles sont "remplacés" par le compilateur.

Dans PHP, toutes les variables sont stockées dans la structure HastTable appelée Table de Symbole. Dans le processus d'analyse de l'exécution, conservez toujours les informations "symbole", donc, certainement peut être obtenu.

Dans PHP, la portée du symbole est associée à la table de symbole active. En même temps, il n'y a qu'une seule table de symbole active.

Alors, comment comprenez-vous la table de symbole actif et la table de symbole ?

Pour PHP, la table de symbole actuellement active est enregistrée dans la variable globale EG (active?symbol?table), et en même temps, il y a une table de symbole globale enregistrée dans l'EG (symbole?table), avant d'entrer dans l'exécution d'un appel de fonction, Une nouvelle table de symbole actif est générée, et une pile de table de symbole de type pile d'appel est maintenue : EG (symtable?cache), de sorte que, lors de la sortie d'un appel de fonction, la table de symbole active précédente (portée) est restaurée.

Dans le même temps dans PHP, l'héritage de portée ne peut pas être mis en œuvre, c'est-à-dire que les symboles de la couche extérieure de la portée ne peuvent pas être consultés directement (avec une déclaration golbal requise), et si la déclaration globale est ajoutée, une copie est également générée dans la portée active actuelle, c'est-à-dire, Les symboles qui n'existent pas dans la portée actuelle sont enregistrés dans le tableau des symboles globaux.

Comme analysé ci-dessus, nous avons seulement besoin de trouver le nom de la variable dont nous avons besoin dans le tableau de symboles actifs actuel,

Bien sûr, avec cela ne suffit pas, comment pouvons-nous mettre en œuvre l'acquisition de la table de symbole s'enprésentace dans les scripts PHP?

get-syled-vars

Une chose à noter, cependant, est que get?defined?vars renvoie les noms variables définis dans le tableau de symbole actif actuel, c'est-à-dire, si vous avez besoin d'envelopper une fonction, il est similaire à:

get-variable-nom ($var)
Et essayer d'obtenir la table de symbole au moment d'appeler get-variable-nom dans cette fonction n'est pas faisable en obtenant le get-défini-vars.

Donc, nous allons obtenir la fonction du nom variable, qui devrait ressembler à ceci:

get-variable-nom ($var, $scope)
Maintenant que vous avez la table de symbole de l'activité actuelle, comment obtenez-vous le nom de la variable?

Évidemment, nous devons interroger ce tableau en fonction de la valeur de la variable, pour trouver une variable dont la valeur est égale à la valeur à trouver, mais, ce faisant, il y a un autre problème, c'est-à-dire qu'il peut y avoir plusieurs variables avec des valeurs égales?

Donc, nous devons donner à cette variable une valeur unique. Et si vous voulez cette variable, alors, la forme de notre fonction de but est changée à nouveau:

get-variable-nom ($var, $scope)
Perfectionnons ce corps fonctionnel :

fonction obtenir snr variable.,'$var,$scope-NULL)
si (NULL s $scope)
$scope - $GLOBALS;
}

$tmp - $var;

$var s "tmp-exists". mt?rand ();

$name s array-search ($var, $scope, TRUE);

$var - $tmp;

retour $name;
}
En outre, il ya un problème que s'il ya plusieurs variables qui sont référencés, alors cette fonction renvoie simplement le premier nom variable défini:

En outre, vous pouvez vous référer à: http://php.net/manual/en/language.variables.php

Nous contacter

Le contenu de cette page provient d'Internet et ne reflète pas l'opinion d'Alibaba Cloud ; les produits et services mentionnés sur cette page n'ont aucune relation avec Alibaba Cloud. Si le contenu de la page vous semble problématique, veuillez nous écrire un courriel, nous traiterons le problème dans les 5 jours suivant la réception de votre message.

Si vous constatez des cas de plagiat de la part de la communauté, veuillez envoyer un courriel à : info-contact@alibabacloud.com et fournir des preuves pertinentes. Un membre de notre équipe vous contactera dans les 5 jours ouvrables.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.