≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > PHP笔记

php 获取一个变量名字的简单示例

人气:622 时间:2018-10-06

这篇文章主要为大家详细介绍了php 获取一个变量名字的简单示例,具有一定的参考价值,可以用来参考一下。

对php 如何获取一个变量的名字感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

转来的文章,但根据文章描述,似乎用处不大。与其剩一下传递的参数,然后再通过符号表去获取,我还不如多传一个参数呢,又方便也不混乱。

当然或许本文的作者是在其他地方方现了他的好处也说不定。

比如, 我提供一个查询服务, 用户可以提交一个人的名字和年龄做为查询条件.

假设我要查询一个名字叫做”laruence”, 年龄是27的人, 我认为这个人的定义的查询token可以写做:

laruence=27

不幸的是, 当这样的一个token做为query string提交给服务器的处理脚本的时候, 你就会发现, 诶,,我不知道用户名是什么,,,

好吧, 于是, 你就只好这么写:

username=laruence&age=27

那么, 能否获取到一个变量的名字呢?

首先, 从可能性上分析,

我们知道, 在C语言中, 所有的符号在编译器都被”替换”掉了.

而在PHP中, 所有的变量都存储在称为”符号表”的HastTable结构中. 在解析执行的过程中, 依旧保留着着”符号”信息, 所以, 肯定是可以获取到的.

而在PHP中, 符号的作用域是和活动符号表相关联的. 同一时间, 只有一个活动符号表.

那么怎么理解活动符号表和符号表呢?

对于PHP来说, 当前活动的符号表是保存在全局变量EG(active_symbol_table)中的, 而于此同时, 还有个全局符号表保存在EG(symbol_table)中, 在进入一个函数调用的执行体之前, 会生成一个新的active_symbol_table, 并且会保持一个调用栈式样的符号表栈:EG(symtable_cache), 以便在退出函数调用的时候, 恢复之前的活动符号表(作用域).

同时在PHP中, 不能实现作用域继承, 也就是不能直接访问作用域外层的符号(需要加上golbal声明), 而如果加上global的声明的话, 也会在当前的活动作用域生成一个copy, 也就是说, 不存在在当前作用域可见的符号是保存在全局符号表的.

如上分析, 我们只需要在当前的活动符号表中, 就可以找到我们需要的变量的名称,

当然, 有了这些还不够, 我们如何在PHP的脚本中实现获取当前的符号表呢?

get_defined_vars 然而有一个问题要注意, 就是get_defined_vars返回的是当前活动符号表中定义的变量名, 也就是说, 如果你需要包装一个函数, 类似于:

get_variable_name($var)

并且尝试在这个函数中通过get_defined_vars来获取在调用get_variable_name时刻的符号表是行不通的.

所以, 我们获取变量名字的函数, 应该是下面的这个样子:

get_variable_name($var, $scope)

现在, 已经得到了当前活动的符号表, 接下来, 如何得到变量的名字呢?

显然, 我们需要根据变量的值去查询这个表, 找到值等于要找值的变量, 但是, 这样做又有一个问题, 那就是, 可能会有多个变量的值相等啊?

所以, 我们需要给这个变量一个唯一值. 而要是想要这个变量, 那么, 我们的这个目的函数的形式又要变一下了:

get_variable_name(&$var, $scope)

接下来完善这个函数体吧:


<?php 
/**
 * php 如何获取一个变量的名字
 * @param 
 * @arrange (512.笔记) www.q1010.com
 **/
function get_variable_name(&$var, $scope = NULL) { if (NULL == $scope) { $scope = $GLOBALS; } $tmp = $var;
$var = "tmp_exists_" . mt_rand();
$name = array_search($var, $scope, TRUE);
$var = $tmp;
return $name; }
/*** 来自四海网(www.q1010.com) ***/

另外, 有一个问题就是, 如果有多个变量之间有引用, 那么这个函数只是返回最先定义的变量名..

本文来自:http://www.q1010.com/173/1457-0.html

注:关于php 获取一个变量名字的简单示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:变量

您可能感兴趣的文章

  • python同时给多个变量赋值的简单示例
  • Python全局变量与局部变量的简单示例
  • Python局部变量和全局变量用法示例
  • python全局变量入门实例
  • python 全局变量与局部变量的简单示例
  • python 局部变量与全局变量功能实例
  • php 内置变量 DIRECTORY_SEPARATOR的简单示例
  • PHP 可变变量用法示例
  • php $$输出变量字符串对应变量的值示例
  • php 静态变量示例的简单示例
上一篇:PHP 通过tcp协议连接服务器的简单示例
下一篇:php 解决smarty和_autoload()冲突的问题
热门文章
  • PHP 写入WRITE编码为UTF8的文件示例
  • PHP 中文字符串截取函数示例:支持gb2312,gbk,big
  • PHP 简单留言板的制作示例
  • 解决Fatal error: Call to undefined function mb_convert_encoding() in错误问题
  • PHP语言基础(标记、注释、变量、数组、常量、函数)示例
  • php 生成迅雷链接的简单示例
  • php 获取短网址的实现方法
  • PHP 通用分页类的简单示例
  • PHP 使用文件方式导入导出整个MYSQL数据库的实现方法
  • php 获取MYSQL错误的简单示例
  • 最新文章
    • 解决PHP使用redis实现统计缓存MySQL压力的问题
    • php 简单的上传进度条的简单示例
    • php 给html中引用的js和css路径打上版本号的实现方法
    • php 实现计算年龄精准到年月日的实例
    • php+ajax无刷新分页的简单示例
    • 解决php+ajax无刷新上传图片的问题
    • 解决PHP生成HTML静态页面的问题
    • 解决PHP使用uniqid函数生成唯一ID的问题
    • 解决PHP防刷票的一些问题
    • 微信access_token的获取开发的实现方法

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。