怎样获取PHP变量的变量名之PHP实现
2015-01-17 08:48
309 查看
【一个编程语言的熟悉,要了解许许多多的细节。这需要一个过程。】
上一篇文章里提到是用PHP扩展实现获取变量的变量名的方法. 今天发现有一个PHP实现的版本 . 实现方法来自:http://mach13.com/how-to-get-a-variable-name-as-a-string-in-php
刚开始以为这个方法好使, 仔细想想其实也是有问题的.
这个解决方法是用的PHP里的get_defined_vars()方法,该方法返回当前作用域内的所有变量信息.也是和$GLOBALS一样,以变量名 => 值的方式返回.
他的代码很简单:
它通过引用的方式改变当前变量的值, 然后通过对比前后两个数组的差异来获取值被改变了的变量.然后返回其名字.经过测试这的确是一个方法.相对我实现的方法. 它提供的方法移植性较好, 不需要赖以扩展. 而这个php版本的实现, 必须传递一个get_defined_vars()的参数, 我实现的那个扩展,则不需要. 对于类似 var_name($a=10,get_defined_vars()); 的调用,该方法无法正常获得变量名.
这个今天又仔细想了想,下面提供的方法是有问题的.. 他解决问题的方法是通过修改变量的值, 并对比前后所有的变量来找出值发生变化的变量. 而实际上.修改了其中一个变量另一个变量的值也会发生变化: 这就是引用, 如下
PS: 如果你真的需要这种方法. 请重新思考一下你的需要真的需要这样的方法么?
上一篇文章里提到是用PHP扩展实现获取变量的变量名的方法. 今天发现有一个PHP实现的版本 . 实现方法来自:http://mach13.com/how-to-get-a-variable-name-as-a-string-in-php
刚开始以为这个方法好使, 仔细想想其实也是有问题的.
这个解决方法是用的PHP里的get_defined_vars()方法,该方法返回当前作用域内的所有变量信息.也是和$GLOBALS一样,以变量名 => 值的方式返回.
他的代码很简单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function var_name (&$iVar, &$aDefinedVars) { foreach ($aDefinedVars as $k=>$v) $aDefinedVars_0[$k] = $v; $iVarSave = $iVar; $iVar =!$iVar; // 将当前变量的值取反 $aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars)); // 对比取反前后的变量 $iVar = $iVarSave; // 恢复当前变量的值 return $aDiffKeys[0]; } ?> |
这个今天又仔细想了想,下面提供的方法是有问题的.. 他解决问题的方法是通过修改变量的值, 并对比前后所有的变量来找出值发生变化的变量. 而实际上.修改了其中一个变量另一个变量的值也会发生变化: 这就是引用, 如下
1 2 3 4 5 | $a = 10; $b = &$a; echo var_name($b, get_defined_vars()); // 这回返回a, 而不是b. 和预期的并不一样. |
相关文章推荐
- js获取php变量的实现代码
- 怎么样获取PHP变量的变量名之扩展实现
- js获取php变量的实现代码
- 怎么样获取PHP变量的变量名之扩展实现
- PHP 替换模板变量实现步骤
- PHP 替换模板变量实现步骤
- 怎样从 Javascript 传递一个变量到 PHP
- PHP获取当前url的函数及服务器变量
- PHP快速入门教程:服务器和浏览器变量获取示例
- 在PHP中怎样实现文件下载?
- 万恶的单线程!!怎样才能实现一个真正的多线程的php socket server啊!!!
- PHP快速入门教程:服务器和浏览器变量获取示例
- php radio 单选框获取与保持值的实现代码
- PHP获取当前url路径的函数及服务器变量:$_SERVER["QUERY_STRING"],$_SERVER["REQUEST_URI"],$_SERVER["SCRIPT_NAME"],$_SERVER["PHP_SELF"]
- PHP实现获取百度top50的搜索排行关键字
- PHP 判断变量类型实现代码
- php怎样实现转向页面?就像asp里面的response.redirect一样
- PHP快速入门教程:服务器和浏览器变量获取示例
- 获取PHP相关信息的PHP函数实现
- 使用PHP获取网络文件的实现代码