php获取一个变量的名字的方法


Posted in PHP onSeptember 05, 2014

PHP中,所有的变量都存储在"符号表"的HastTable结构中,符号的作用域是与活动符号表相关联的。因此,同一时间,只有一个活动符号表。

我们要获取到当前活动符号表可以通过 get_defined_vars 方法来获取。

get_defined_vars // 返回所有已定义的变量所组成的数组

根据变量的值查找变量名字,但要注意,有可能有相同值的变量存在。

因此先将当前变量的值保存到一个临时变量中,然后再对原变量赋唯一值,以便查找出变量的名字,找到名字后,将临时变量的值重新赋值到原变量。

例子1:

<?php 

$a = '100'; 

echo '$a name is:'.get_variable_name($a).' value:'.$a; // $a name is: a value: 100 

/** 
* @param String $var 要查找的变量 
* @param Array $scope 要搜寻的范围 
* @param String 变量名称 
*/ 
function get_variable_name(&$var, $scope=null){ 

$scope = $scope==null? $GLOBALS : $scope; // 如果没有范围则在globals中找寻 

// 因有可能有相同值的变量,因此先将当前变量的值保存到一个临时变量中,然后再对原变量赋唯一值,以便查找出变量的名称,找到名字后,将临时变量的值重新赋值到原变量 
$tmp = $var; 

$var = 'tmp_value_'.mt_rand(); 
$name = array_search($var, $scope, true); // 根据值查找变量名称 

$var = $tmp; 
return $name; 
}
?>

例子2:获取function里面定义的变量名字

<?php 
function test(){ 
$a = '100'; 
echo '$a name is:'.get_variable_name($a); 
} 

test(); // $a name is: undefined 
//因为在function中定义的变量globals会找不到 

function test2(){ 
$a = '100'; 
echo '$a name is:'.get_variable_name($a, get_defined_vars()); 
} 

test2(); // $a name is: a 
// 将scope设定为 get_defined_vars() 可以找到 

?>
PHP 相关文章推荐
如何过滤高亮显示非法字符
Oct 09 PHP
PHP实现多服务器session共享之NFS共享的方法
Mar 16 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
php class中public,private,protected的区别以及实例分析
Jun 18 PHP
基于flush()不能按顺序输出时的解决办法
Jun 29 PHP
php 魔术方法详解
Nov 11 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
PHP区块查询实现方法分析
May 12 PHP
php通过各种函数判断0和空
Jul 04 PHP
PHP封装的简单连接MongoDB类示例
Feb 13 PHP
Laravel 模型关联基础教程详解
Sep 17 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 #PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 #PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
Sep 04 #PHP
Chrome Web App开发小结
Sep 04 #PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 #PHP
php设计模式之简单工厂模式详解
Sep 04 #PHP
Laravel框架表单验证详解
Sep 04 #PHP
You might like
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
PHP网络操作函数汇总
2015/05/18 PHP
初学JavaScript第二章
2008/09/30 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
python利用hook技术破解https的实例代码
2013/03/25 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
python能自学吗
2020/06/18 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
电信专业毕业生推荐信
2013/11/18 职场文书
优秀员工个人的自我评价
2013/11/29 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
工作个人的自我评价
2014/01/14 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
先进党支部事迹材料
2014/12/24 职场文书
财务出纳岗位职责
2015/03/31 职场文书
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫