PHP获得某个变量的名字,代码解释
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_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();
是什么意思?谁能解释下
题主仔细读鸟哥的原文就会发现这句话:
显然, 我们需要根据变量的值去查询这个表, 找到值等于要找值的变量, 但是, 这样做又有一个问题, 那就是, 可能会有多个变量的值相等啊?
我们测试一下:
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>
输出如下:
//区分成功
首先回答题主的问题,目的是修改需要查找变量的值使其在全局变量中唯一。然后说下我对这个函数的理解:
这个函数有几处地方需要注意的:
- 首先是参数
&$var
,这里用了引用,需要注意一下,作用在后头会说。 - 然后是使用了
$GLOBALS
超全局变量 - 就是题主说的更改了
$var
变量的值
$GLOBALS超全局变量是一个数组,负责存储页面上所有的变量的,这个函数的意思是通过使用array_search()函数在这个全局变量数组中搜索这个变量值,如果存在的话则返回其键名。为了防止有重复的值出现,函数则使用了 mt_rand() 函数更改了 $var
的值为一个唯一随机变量并在查询结束之后重新把原值赋上,如果没有这句话的话在有变量存在相同值的情况下就无法分辨。
传进来的第一个参数是指向某变量的引用,这样可以在方法内部操作外面传进来的变量。
紧接着开始操作, 给外面的变量,先赋值一个随机、又不重复的临时值,方便在作用域(默认 GLOBAL)里按照值去查找。
找到之后,再把这个变量的值赋回去。
方法的关键是 array_search 的用法, 以值去搜索(所以要给个不可能重复的值),搜到后返回键名(GLOBAL 作用域下的变量, 都存在于 $GLOBAL[$key] = $value 这个数组里)。
函数利用了PHP的变量的变量这个概念.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다
