允许我的函数访问外部变量

2022-08-30 07:49:12

我在外面有一个数组:

$myArr = array();

我想让我的函数访问它外面的数组,这样它就可以向它添加值

function someFuntion(){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

如何为变量指定函数正确的作用域?


答案 1

默认情况下,当您在函数内部时,您无权访问外部变量。


如果希望函数能够访问外部变量,则必须在函数内将其声明为 :global

function someFuntion(){
    global $myArr;
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

有关详细信息,请参阅变量作用域

但请注意,使用全局变量不是一个好的做法:这样,你的函数就不再是独立的了。


一个更好的主意是让你的函数返回结果

function someFuntion(){
    $myArr = array();       // At first, you have an empty array
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;      // Put that $myVal into the array
    return $myArr;
}

并像这样调用函数:

$result = someFunction();


你的函数也可以接受参数,甚至可以处理通过引用传递的参数

function someFuntion(array & $myArr){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;      // Put that $myVal into the array
}

然后,像这样调用函数:

$myArr = array( ... );
someFunction($myArr);  // The function will receive $myArr, and modify it

有了这个:

  • 您的函数接收外部数组作为参数
  • 并且可以修改它,因为它是通过引用传递的。
  • 这比使用全局变量更好:你的函数是一个单元,独立于任何外部代码。


有关这方面的更多信息,您应该阅读PHP手册的函数部分,特别是以下小节:


答案 2
$foo = 42;
$bar = function($x = 0) use ($foo){
    return $x + $foo;
};
var_dump($bar(10)); // int(52)

更新:现在支持箭头函数,但我会让更多使用它的人创建答案


推荐