• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP获得某个变量的名字,代码解释

php 搞代码 3年前 (2022-01-25) 10次浏览 已收录 0个评论
文章目录[隐藏]

Hello,在PHP里,我想获得某个变量的名字,如

<code>$name = 'xiaomin';echo get_varible_name($name);\\ output 'name'</code>

我在这里看到一段代码

<code>function get_variable_name(&$var, $scope = NULL) {       if (NULL == $scope) {          $scope = $GLOBALS;       }       $tmp  = $var;       $var   = "tmp_exists_" . mt_rand();       $name = array_search($var, $scope, TRUE);        $var   = $tmp;       return $name;}</code>

其中的$var = "tmp_exists_" . mt_rand();是什么意思?谁能解释下

回复内容:

Hello,在PHP里,我想获得某个变量的名字,如

<code>$name = 'xiaomin';echo get_varib<strong style="color:transparent">来2源gaodaima#com搞(代@码&网</strong><label>搞gaodaima代码</label>le_name($name);\\ output 'name'</code>

我在这里看到一段代码

<code>function get_variable_name(&$var, $scope = NULL) {       if (NULL == $scope) {          $scope = $GLOBALS;       }       $tmp  = $var;       $var   = "tmp_exists_" . mt_rand();       $name = array_search($var, $scope, TRUE);        $var   = $tmp;       return $name;}</code>

其中的$var = "tmp_exists_" . mt_rand();是什么意思?谁能解释下

<body>

题主仔细读鸟哥的原文就会发现这句话:

显然, 我们需要根据变量的值去查询这个表, 找到值等于要找值的变量, 但是, 这样做又有一个问题, 那就是, 可能会有多个变量的值相等啊?

我们测试一下:
1.注释掉题主疑惑的那句话:

<code>$test1 = 123;$test2 = 123;function get_variable_name(&$var, $scope = NULL) {       if (NULL == $scope) {          $scope = $GLOBALS;       }       $tmp  = $var;       $var   = "tmp_exists_" . mt_rand();       // $name = array_search($var, $scope, TRUE);       $var   = $tmp;       return $name;}echo get_variable_name($test1)."\n";echo get_variable_name($test2);</code>

我们看下输出:

//无法区分

2.现在我们取消注释:

<code>$test1 = 123;$test2 = 123;function get_variable_name(&$var, $scope = NULL) {       if (NULL == $scope) {          $scope = $GLOBALS;       }       $tmp  = $var;       $var   = "tmp_exists_" . mt_rand();       $name = array_search($var, $scope, TRUE);       $var   = $tmp;       return $name;}echo get_variable_name($test1)."\n";echo get_variable_name($test2);</code>

输出如下:

//区分成功

首先回答题主的问题,目的是修改需要查找变量的值使其在全局变量中唯一。然后说下我对这个函数的理解:

这个函数有几处地方需要注意的:

  1. 首先是参数&$var,这里用了引用,需要注意一下,作用在后头会说。
  2. 然后是使用了$GLOBALS超全局变量
  3. 就是题主说的更改了$var变量的值

$GLOBALS超全局变量是一个数组,负责存储页面上所有的变量的,这个函数的意思是通过使用array_search()函数在这个全局变量数组中搜索这个变量值,如果存在的话则返回其键名。为了防止有重复的值出现,函数则使用了 mt_rand() 函数更改了 $var 的值为一个唯一随机变量并在查询结束之后重新把原值赋上,如果没有这句话的话在有变量存在相同值的情况下就无法分辨。

传进来的第一个参数是指向某变量的引用,这样可以在方法内部操作外面传进来的变量。

紧接着开始操作, 给外面的变量,先赋值一个随机、又不重复的临时值,方便在作用域(默认 GLOBAL)里按照值去查找。

找到之后,再把这个变量的值赋回去。

方法的关键是 array_search 的用法, 以值去搜索(所以要给个不可能重复的值),搜到后返回键名(GLOBAL 作用域下的变量, 都存在于 $GLOBAL[$key] = $value 这个数组里)。

函数利用了PHP的变量的变量这个概念.


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP获得某个变量的名字,代码解释

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址