php:从函数内部返回compact()值

时间:2018-11-13 05:37:19

标签: php

我想知道为什么php全局函数compact()在函数内部使用时仅返回空数组。

下面是代码示例:

$hello = "world";

function myFunc($str) {
    return compact($str);
}

$arr = myFunc('hello');

print_r($arr);

任何帮助将不胜感激。 谢谢!

3 个答案:

答案 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);

check output

如果您有多个变量,请像这样使用,

$f_name='john';
$l_name='smith';
$address='xyz';

$result = compact("f_name", "l_name", "address");

print_r($result);

参数::该函数接受由逗号运算符(',')分隔的可变数量的参数。这些参数是字符串数据类型,并指定我们要用于创建数组的变量的名称。我们还可以将数组作为该函数的参数传递,在这种情况下,数组中作为参数传递的所有元素都将添加到输出数组。

Reference

答案 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?