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 相关文章推荐
php SQL Injection with MySQL
Feb 27 PHP
比较详细PHP生成静态页面教程
Jan 10 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
三种php连接access数据库方法
Nov 11 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
Aug 18 PHP
php静态文件返回304技巧分享
Jan 06 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
php搜索文件程序分享
Oct 30 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
django中的ajax组件教程详解
Oct 18 PHP
PHP基本语法
Mar 31 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
php链表用法实例分析
2015/07/09 PHP
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
和解协议书
2014/04/16 职场文书
运动会宣传口号
2014/06/09 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
创先争优个人总结
2015/03/04 职场文书
婚庆司仪开场白
2015/05/29 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang
Python基础学习之奇异的GUI对话框
2021/05/27 Python
AJAX实现省市县三级联动效果
2021/10/16 Javascript
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL
Golang 并发编程 SingleFlight模式
2022/04/26 Golang