我想知道为什么php全局函数compact()在函数内部使用时仅返回空数组。
下面是代码示例:
$hello = "world";
function myFunc($str) {
return compact($str);
}
$arr = myFunc('hello');
print_r($arr);
任何帮助将不胜感激。 谢谢!
答案 0 :(得分:1)
变量$ hello范围问题 试试这个:
Rate
答案 1 :(得分:1)
compact()
函数是PHP中的内置函数,用于使用变量创建数组。此函数与extract()函数相反。它创建一个关联数组,其键为变量名,其对应值为数组值。
您正在传递像这样的变量compact($str)
,但是在compact
中我们使用了这样的pass参数(在single quote
中没有$
符号)
compact('str');
知道您的代码是这样的
$hello = "world";
function myFunc($str) {
return compact('str');//compact('str'): means passing $str variable
}
$arr = myFunc('hello');//or myFunc($hello); (myFunc('hello'): means passing hello string and myFunc($hello): means passing $hello variable)
print_r($arr);
如果您有多个变量,请像这样使用,
$f_name='john';
$l_name='smith';
$address='xyz';
$result = compact("f_name", "l_name", "address");
print_r($result);
参数::该函数接受由逗号运算符(',')
分隔的可变数量的参数。这些参数是字符串数据类型,并指定我们要用于创建数组的变量的名称。我们还可以将数组作为该函数的参数传递,在这种情况下,数组中作为参数传递的所有元素都将添加到输出数组。
答案 2 :(得分:1)
这是因为myFunc
不在全局范围内,并且无法访问$hello
变量。考虑一下这段代码:
$hello = "world";
function myFunc () {
echo $hello;
}
myFunc(); // => PHP: Undefined variable: hello
myFunc
根本无法访问全局变量$hello
。但是,如果在函数中添加global
语句,则可以访问全局范围:
$hello = "world";
function myFunc () {
global $hello;
echo $hello;
}
myFunc(); // => world
因此,总而言之,如果在函数顶部添加global
,则函数可以按预期工作:
$hello = "world";
function myFunc ($str) {
global $hello;
return compact($str);
}
$arr = myFunc('hello');
print_r($arr); // => Array ( [hello] => world )
以下是有关变量范围的更多信息:Reference: What is variable scope, which variables are accessible from where and what are "undefined variable" errors?