假设我有两个嵌套函数:
$a = 1;
$b = 2;
function test(){
$b = 20;
function Sum()
{
$b = $GLOBALS['a'] + $b;
}
}
test();
Sum();
echo $b;
现在我希望函数Sum()访问函数test()中声明的$ b变量;
你好吗?
答案 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变量。