// SCOPE 1
printsmth();
function printsmth(){
// SCOPE 2 (printsmth)
// here (inside SCOPE 2) get variables visible in SCOPE 1
// var_dump($vars);
}
我可以这样做吗?
基本上我想从调用函数的地方获取所有声明的变量,但是在函数内部(并忽略在我的函数中声明的变量)
类似于在我的函数中获取get_defined_vars();
的结果,但是对于之前的范围:)
答案 0 :(得分:2)
您可以在范围1中简单地将变量声明为全局变量,并为变量赋值。进一步在函数体(范围2)中声明与global相同的变量来访问它。以上示例变为
// SCOPE 1
global $var1, $var2;
$var1 = 1;
$var2 = 2;
printsmth();
function printsmth(){
global $var1, $var2;
echo 'Var1:' . $var1 . 'Var2:' . $var2;//now accessible in scope 2
}
另一个选择是您可以通过引用传递变量到函数。例如,
// SCOPE 1
$var1 = 1;
$var2 = 2;
printsmth($var1, $var2);
// Note the "&" appended to the parameters. This passes the variables to the
// function by reference. Any modifications made to the variables will update
// the actual variables in the scope 1
function printsmth(&$var1, &$var2){
global $var1, $var2;
echo 'Var1:' . $var1 . 'Var2:' . $var2;//now accessible in scope 2
}
答案 1 :(得分:1)
它如此简单
$valriable_Outside_scope;
// SCOPE 1
printsmth();
function printsmth(){
global $valriable_Outside_scope;
// SCOPE 2 (printsmth)
// here (inside SCOPE 2) get variables visible in SCOPE 1
}
global varibale_name; //将允许你访问外部范围项
答案 2 :(得分:1)
我知道你在问什么。这是你(或我)想要的方式所不可能的。
您必须以与上述方式类似的方式传递它们。我就是这样做的:
function print_smith($globals) {
extract($globals);
echo $variable;
}
$variable = 'Smith';
$vars = get_defined_vars();
printsmith($vars); // Smith
这种方式稍微冷一点(没有传递参数):
function print_smith() {
global $vars;
if(NULL !== $vars) {
extract($vars);
}
echo $variable;
}
$variable = 'Smith';
$vars = get_defined_vars();
printsmith(); // Smith
答案 3 :(得分:0)
使用global
关键字:
$variable = true;
function printsmth(){
global $variable;
if ( $variable ) {
echo 'it works';
}
}
printsmth();
答案 4 :(得分:0)
这样:
$var = "hello";
printsmth();
function printsmth(){
global $var;
echo $var;
}