搜索

首页  >  问答  >  正文

增强函数对外部变量的访问

我在外面有一个数组:

$myArr = array();

我想让我的函数访问其外部的数组,以便它可以向其中添加值

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

如何为函数赋予变量正确的作用域?

P粉165522886P粉165522886425 天前479

全部回复(2)我来回复

  • P粉645569197

    P粉6455691972023-10-17 13:51:02

    您可以使用匿名函数

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

    或者您可以使用箭头函数

    $bar = fn($x = 0) => $x + $foo;

    回复
    0
  • P粉734486718

    P粉7344867182023-10-17 13:39:45

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


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

    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 手册的 /a> 部分,特别是以下子部分:

    回复
    0
  • 取消回复