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)
这种"内在功能"并不符合您的预期.全局(!)函数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)
编辑了您的代码。您可能要参考此
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)