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

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() 可以找到 

?>
(0)

相关推荐

  • 深入分析PHP引用(&)

    引用是什么 在 PHP 中引用意味着用不同的名字访问同一个变量内容.这并不像 C 的指针,替代的是,引用是符号表别名.注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字.最接近的比喻是 Unix 的文件名和文件本身--变量名是目录条目,而变量内容则是文件本身.引用可以被看作是 Unix 文件系统中的 hardlink. 引用做什么 PHP 的引用允许用两个变量来指向同一个内容.意思是,当这样做时: <?php $a =& $b; ?> 这意味着 $a 和 $

  • php实现最简单的MVC框架实例教程

    本文以一个实例的形式讲述了PHP实现MVC框架的过程,比较浅显易懂.现分享给大家供大家参考之用.具体分析如下: 首先,在学习一个框架之前,基本上我们都需要知道什么是mvc,即model-view-control,说白了就是数据控制以及页面的分离实现,mvc就是这样应运而生的,mvc分为了三个层次,而且三个层次各司其职,互不干扰,首先简单介绍下,各个层次:view即是视图,也就是web页面,control即是控制器 向系统发出指令的工具,model 简单说是从数据库中取出数据进行处理. MVC的工

  • PHP闭包(Closure)使用详解

    不知不觉发现PHP已经出到了5.5版本,而自己一直在用PHP5.2,让我看起来像深山出来的小伙子一样,又土又落后.在我习惯在javascript中使用闭包之后,忽然间对PHP的闭包打起了兴趣. 于是乎在网上下了个WAMP集成开发环境,是PHP5.3版本的(PHP5.3开始引入了闭包的特性),不得不说WAMP安装使用真的很方便.简单配置了一下,开始动手. 匿名函数提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它.声明一个匿名函数是这样: 复制代码 代码

  • PHP基本语法总结

    一.PHP能做什么? PHP能做什么?我觉得它很强大,只要我能想到的,它都能做,只是我技术能力还不行╮(╯﹏╰)╭.好吧,一张图,基本了解一下吧(ps:PHP的功能不局限于此( ^_^ )) 图像有点模糊,凑合一下,(≧▽≦)/ 二.PHP语言标记 1.结束和开始标记 1.1 <?php //code ?>:属于xml风格,是PHP的标准风格,推荐使用. 1.2 <script language="php">  //code </script>:长风

  • php中的mongodb select常用操作代码示例

    前面说到了mongodb安装,配置,集群,以及php的插入与更新等,请参考:mongodb. 下面说一下,mongodb select的常用操作 测试数据: 复制代码 代码如下: { "_id" : 1, "title" : "红楼梦", "auther" : "曹雪芹", "typeColumn" : "test", "money" : 80,

  • php设计模式之简单工厂模式详解

    本文以实例形式较为详细的介绍了PHP设计模式的简单工厂模式,对于进行PHP程序设计来说有很好的借鉴作用.具体如下: 一.概念 简单工厂模式 [静态工厂方法模式](Static Factory Method) 是类的创建模式 工厂模式的几种形态: 1.简单工厂模式(Simple Factory)又叫做 静态工厂方法模式(Static Factory Method) 2.工厂方法模式(Factory Method)又叫做 多态性工厂模式(Polymorphic Factory) 3.抽象工厂模式(A

  • PHP闭包实例解析

    本文实例分析了PHP程序设计中闭包的概念机用法,分享给大家供大家参考.具体分析如下: 通常来说,闭包也就是PHP的匿名函数, 但是和函数不同的是,闭包可以通过use使用函数声明时所在作用域的变量的值. 具体形式如下: $a = function($arg1, $arg2) use ($variable) { // 声明函数闭包到变量$a, 参数为$arg1, $arg2 ,该闭包需使用$variable变量 } 具体用法实例如下: <?php $result = 0; $one = functi

  • 浅谈PHP 闭包特性在实际应用中的问题

    呃,其实大部分情况下是可以的,而有些方面还是令人非常的困扰,下面慢慢道来. 很多语言的都提供了非常优雅和漂亮的操作数组的方法.在下面的例子中,会使用 PHP5.3 以及其他语言提供的闭包功能,用于展示如何"客观的"操作迭代数组. 译注:原文作者比较火星,我不了解 Groovy 以及 Scala 语言,所以这里我加上 Javascript 的实现. 在开始之前先说明下,本例子仅仅是阐明观点,并没有考虑性能等其他方面的因素. "货比三家" 用个简单的例子开始,有下面个数

  • PHP高级编程实例:编写守护进程

    1.什么是守护进程 守护进程是脱离于终端并且在后台运行的进程.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断. 例如 apache, nginx, mysql 都是守护进程 2.为什么开发守护进程 很多程序以服务形式存在,他没有终端或UI交互,它可能采用其他方式与其他程序交互,如TCP/UDP Socket, UNIX Socket, fifo.程序一旦启动便进入后台,直到满足条件他便开始处理任务. 3.何时采用守护进程开发应用程

  • php实现的常见排序算法汇总

    本文汇总了常见的php排序算法,在进行算法设计的时候有不错的借鉴价值.现分享给大家供参考之用.具体如下: 一.插入排序 用文字简单的描述,比如说$arr = array(4,2,4,6,3,6,1,7,9); 这样的一组数字进行顺序排序: 那么,首先,拿数组的第二个元素和第一元素比较,假如第一个元素大于第二元素,那么就让两者位置互换,接下来,拿数组的第三个元素,分别和第二个,第一个元素比较,假如第三个元素小,那么就互换.依次类推.这就是插入排序,它的时间频度是:1+2+...+(n-1)=(n^

随机推荐