如何获取一个变量的名字
比如, 我提供一个查询服务, 用户可以提交一个人的名字和年龄做为查询条件. 假设我要查询一个名字叫做”laruence”, 年龄是27的人, 我认为这个人的定义的查询token可以写做:
laruence=27 好吧, 于是, 你就只好这么写:
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_variable_name($var) 所以, 我们获取变量名字的函数, 应该是下面的这个样子:
get_variable_name($var, $scope) 显然, 我们需要根据变量的值去查询这个表, 找到值等于要找值的变量, 但是, 这样做又有一个问题, 那就是, 可能会有多个变量的值相等啊? 所以, 我们需要给这个变量一个唯一值. 而要是想要这个变量, 那么, 我们的这个目的函数的形式又要变一下了:
get_variable_name(&$var, $scope)
function get_variable_name(&$var, $scope = NULL) { 另外, 你也可以参考: http://php.net/manual/en/language.variables.php |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |