有没有办法从$foo
内访问inner()
?
function outer()
{
$foo = "...";
function inner()
{
// print $foo
}
inner();
}
outer();
答案 0 :(得分:43)
PHP< 5.3不支持闭包,所以你必须将$ foo传递给inner()或者从outer()和inner()(BAD)中创建$ foo全局。
在PHP 5.3中,您可以执行
function outer()
{
$foo = "...";
$inner = function() use ($foo)
{
print $foo;
};
$inner();
}
outer();
outer();
答案 1 :(得分:1)
或者我错过了一些你想要做的更复杂的事情?
function outer()
{
$foo = "...";
function inner($foo)
{
// print $foo
}
inner($foo);
}
outer();
编辑好吧我想我知道你要做什么。您可以使用全局类来完成此操作,但不确定此特定情况
答案 2 :(得分:0)
我知道这可以通过类来完成,但是对于独立的函数,我确信如果不设置公共/私有变量就无法进行检索。
但是我能想到的唯一可能的方式(没有经历过这种类型的东西)是将$ foo传递给内部然后进行回声或打印。 :)
答案 3 :(得分:0)
我想提一下,这可能不是编码的最佳方式,因为您在另一个内部定义了一个函数。总有比以这种方式做的更好的选择。
function outer()
{
global $foo;
$foo = "Let us see and understand..."; // (Thanks @Emanuil)
function inner()
{
global $foo;
print $foo;
}
inner();
}
outer();
这将输出: -
Let us see and understand...
您可以编写下面的代码片段,而不是以这种方式编写: -
function outer()
{
$foo = "Let us see improved way...";
inner($foo);
print "\n";
print $foo;
}
function inner($arg_foo)
{
$arg_foo .= " and proper way...";
print $arg_foo;
}
outer();
最后一段代码片段将输出: -
Let us see improved way... and proper way...
Let us see improved way...
但最后,总是取决于您将要使用的流程。希望它有所帮助。
答案 4 :(得分:0)
我认为不可能。
PHP手册对此有一些评论,并且没有人找到解决方案。
http://www.php.net/manual/en/language.variables.scope.php#77693
另一条评论表明嵌套函数实际上并不是“嵌套”的真实
http://www.php.net/manual/en/language.variables.scope.php#20407