关于PHP函数get_defined_vars返回多维数组描述的疑问
关于PHP函数get_defined_vars返回多维数组描述的疑问
嘿,我最近研究PHP的get_defined_vars()函数时,发现手册里的描述有点让我困惑,想跟大家聊聊这个问题。
首先先把手册里的原文搬出来:
这个函数返回一个多维数组,包含了在调用
get_defined_vars()的作用域内所有已定义的变量,包括环境变量、服务器变量或用户定义的变量。
我原本对“多维数组”的理解是——数组本身有多层嵌套的维度,但实际测试下来,比如在函数内部调用这个函数时,返回的明明是个一维关联数组啊!举个简单的例子:
function myTestFunc() { $username = "George"; $favoriteLang = "PHP"; $result = get_defined_vars(); print_r($result); } myTestFunc();
输出结果是这样的一维关联数组:
Array ( [username] => George [favoriteLang] => PHP )
这就让我犯嘀咕了:手册里说的“多维数组”是不是描述得不够精准,甚至有点误导人?难道在某些特定的上下文场景下,它真的会返回一个多层嵌套的多维数组吗?
后来我仔细测试了几种场景,发现手册的描述其实是有它的道理的,只是表述不够直白:
- 当在全局作用域调用
get_defined_vars()时,返回的数组里会包含$_SERVER、$_ENV这些预定义的超全局数组,这些数组本身就是嵌套结构,所以整个返回的结果就成了“数组里包含数组”的多维结构。 - 如果你在代码里定义了一个嵌套数组变量,比如
$myArray = [['a', 'b'], ['c', 'd']];,那么get_defined_vars()返回的数组中,$myArray对应的取值是二维数组,此时整个返回结果也会是多维的。
说白了,手册里的“多维数组”指的是返回的数组中可能包含嵌套的数组元素,而不是说函数一定会返回一个本身就是多维度的数组结构。不过这个描述确实容易让人误解,毕竟很多人第一反应会以为函数返回的数组本身就是多层嵌套的,而不是元素里有数组。
有没有朋友遇到过类似的困惑?或者有其他场景能让这个函数返回明显的多维数组吗?
备注:内容来源于stack exchange,提问作者George Kourtis
相关产品推荐
相关产品推荐

