2012-03-10 126 views
3

有没有办法在PHP中实现以下内容,还是仅仅是不允许? (请参阅下面的注释行)从外部函数(PHP)中访问函数中的局部变量

function outside() { 
    $variable = 'some value'; 
    inside(); 
} 

function inside() { 
    // is it possible to access $variable here without passing it as an argument? 
} 
+2

尽管每个人都告诉你,你可以使用全局变量:相信我 - 不要使用它们。它们只适用于小众情况,如果你开始使用它们,你会发现所有的代码都会变成一场灾难。 – 2012-03-10 12:52:57

+0

如果你能解释你正在尝试完成的事情,也许我们可以想出一个很酷的kludge或者b)完成它的正确方法 – Jake 2012-03-10 14:01:18

+1

我在研究某些代码时想到了这种特殊情况,那些询问会帮助我更清楚地了解不同的范围。它做了! – hsdev 2012-03-10 17:29:23

回答

1

它不可能。如果$variable是全球性变量,您可通过global关键字来访问该文件。但是这是一个功能。所以你不能访问它。

虽然可以通过设置一个全局变量$GLOBALS数组来实现。但是,你正在利用全球背景。

function outside() { 
    $GLOBALS['variable'] = 'some value'; 
    inside(); 
} 

function inside() { 
     global $variable; 
     echo $variable; 
} 
1

不,您不能从另一个函数访问函数的局部变量,而不会将其作为参数传递。

您可以使用global变量,但变量不会保持本地。

0

您不能在函数中访问本地变量。变量必须设置为全局

function outside() { 
global $variable; 
    $variable = 'some value'; 
    inside(); 
} 

function inside() { 
global $variable; 
    echo $variable; 
} 

这工作

2

注意,使用global关键字是不可取的,因为你无法控制的(你永远不知道在您的应用程序是用在其他变量和改变) 。但如果你正在使用类,它会使事情变得更容易!

class myClass { 
    var $myVar = 'some value'; 

    function inside() { 
     $this->myVar = 'anothervalue'; 
     $this->outside(); // echoes 'anothervalue' 
    } 

    function outside() { 
     echo $this->myVar; // anothervalue 
    } 
} 
1

这是不可能的。你可以通过使用global来完成。如果你仅仅只有不想定义参数,但可以给它里面的功能,你可以使用:

function outside() { 
    $variable = 'some value'; 
    inside(1,2,3); 
} 

function inside() { 
    $arg_list = func_get_args(); 
    for ($i = 0; $i < $numargs; $i++) { 
     echo "Argument $i is: " . $arg_list[$i] . "<br />\n"; 
    } 
} 

为看到PHP手册funct_get_args()

+0

不知道funct_get_args()函数,在某些情况下可能非常有用。谢谢! – hsdev 2012-03-10 17:20:12