如何在内部函数PHP中访问变量?

Vas*_*asu 1 php scope function

如何在inner函数变量的函数中访问outer变量?

我想$arr在内部函数中访问变量.

<?php

function outer() {

    $arr = array();

    function inner($val) {

        global $arr;

        if($val > 0) {
            array_push($arr,$val);
        }
    }

    inner(0);
    inner(10);
    inner(20);

    print_r($arr);

}

outer();
Run Code Online (Sandbox Code Playgroud)

键盘链接

Fab*_*ler 8

这种"内在功能"并不符合您的预期.全局(!)函数inner()将在调用时定义outer().这也意味着,调用outer()两次会导致"无法重新定义inner()"错误.

正如@hindmost指出的那样,您需要闭包,可以访问当前作用域变量的函数.此外,虽然普通函数不能具有局部范围,但闭包可以,因为它们存储为变量.

您的代码与闭包:

function outer() {

    $arr = array();

    $inner = function($val) use (&$arr) {
        if($val > 0) {
            array_push($arr,$val);
        }
    }

    $inner(0);
    $inner(10);
    $inner(20);

    print_r($arr);

}

outer();
Run Code Online (Sandbox Code Playgroud)

  • 正确的方法..**+ 1**封闭! (2认同)

Nui*_*uit 5

编辑了您的代码。您可能要参考此

function outer() {

    $arr = array();

    function inner(&$arr,$val) { // pass array by reference
        if($val > 0) {
            array_push($arr,$val);
        }
    }

    inner($arr,0);
    inner($arr,10);
    inner($arr,20);

    print_r($arr);

}

outer();
Run Code Online (Sandbox Code Playgroud)

您可以arr按值传递,但无法打印该值

Array
(
    [0] => 10
    [1] => 20
)
Run Code Online (Sandbox Code Playgroud)