首頁  >  問答  >  主體

增強函數對外部變數的訪問

我在外面有一個陣列:

$myArr = array();

我想讓我的函數存取其外部的數組,以便它可以向其中添加值

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

如何為函數賦予變數正確的作用域?

P粉165522886P粉165522886339 天前419

全部回覆(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
  • 取消回覆