访问php中嵌套函数中的变量

时间:2011-11-07 11:32:27

标签: php

假设我有两个嵌套函数:

$a = 1;
$b = 2;

function test(){
    $b  =   20;
    function Sum()
    {   
        $b  =   $GLOBALS['a']   +   $b;
    }
}
test();
Sum();
echo $b;

现在我希望函数Sum()访问函数test()中声明的$ b变量;
你好吗?

4 个答案:

答案 0 :(得分:5)

野生猜测模式:
你的函数Sum()将“正常”采用两个参数/操作数,如

function Sum($a, $b) {  
  return $a+$b;
}
echo Sum(1, 20);

现在你有了Test()函数,你希望它返回一个函数 fn ,它只接受一个参数,然后调用Sum($ a,$ b)一个“预定义”参数,一个传递给 fn

这称为currying或部分应用程序(取决于你究竟实现了什么),你可以用lambda functions/closures做类似的事情,因为php 5.3

<?php
function Sum($a, $b) {
    return $a + $b;
}

function foo($a) {
    return function($b) use ($a) {
        return Sum($a, $b);
    };
}

$fn = foo(1) // -> Sum(1, $b);
$fn = foo(2) // -> Sum(2, $b);
echo $fn(47);

答案 1 :(得分:1)

为什么不使用它?

$a = 1;
$b = 2;

function test(){
    $b = Sum(20);
}

function Sum($value)
{   
    $value = $GLOBALS['a'] + $value;
    return $value;
}

test();
// Sum(); // Why do you need this here??
echo $b;

编辑:没有全局

更好
$a = 1;
$b = 2;

function Sum($value1, $value2)
{   
    return $value1 + $value2;
}

$b = 20; // you could call Sum($a, 20); instead
$b = Sum($a, $b);
echo $b;

答案 2 :(得分:1)

根据Context,最好的方法是将变量传递给像这样的函数

@echo off set "size1=2147483647" set "size2=2147483646" set "null=000000000000000" set "size1=%null%%size1%" set "size2=%null%%size2%" set "size1=%size1:~-15%" set "size2=%size2:~-15%" if "%size1%" gtr "%size2%" echo size1 is greater

但如果您正在寻找替代方案,那么您可以使用闭包 但是记住PHP&lt; 5.3不支持闭包

你可以做到

Sum($b)

答案 3 :(得分:-1)

您需要使用global变量。