如何在带参数的函数中调用变量函数?
我想在一个函数中调用一个变量函数,但它不像预期的那样工作。如何在带参数的函数中调用变量函数?
这里是我的代码:
$arg1 = "Beef";
$arg2 = "Potatoes";
$string1 = "Tomatoes";
$string2 = "Onions";
function func1 ($arg1, $arg2){
echo $arg1.' '.$arg2;
}
$var1 = "func1";
function func2($string1, $string2, $var1) {
echo $string1." & ".$string2;
$var1($arg1, $arg2);
}
func2($string1, $string2, $var1);
当我打电话func2
,它只是呼应 “西红柿&洋葱” 心不是$arg1
和$arg2
全球?为什么在函数func2
内看不到?我如何在func2
内部调用$var1
以及它的参数?
由于变量范围的原因,Func1期待2个参数没有传递给它。
变化
function func2($string1, $string2, $var1) {
echo $string1." & ".$string2;
$var1($arg1, $arg2);
}
到
function func2($string1, $string2, $var1) {
Global $arg1, $arg2;
echo $string1." & ".$string2;
$var1($arg1, $arg2);
}
是不是$ string1和$ arg1具有相同的作用域?为什么我需要为$ arg1声明全局? –
是的,string1和arg1具有相同的作用域,并且都在函数作用域之外。然而,用这行代码:func2($ string1,$ string2,$ var1);您将String1和String2添加到func2的作用域中(通过参数),而$ arg1仍然在函数作用域之外。除非它是作为参数传递或者像上面那样声明为Global,否则它将不起作用。 – Kaylined
利用全球$ ARG1,里面FUNC2 – coder
$ ARG2 **心不是$ ARG1和ARG2 $全球?**是。默认情况下,全局变量不能在函数内部访问。 – Barmar
'func2'不包含'func1' **里面的**,也不包含变量。您可以将它们定义为全局变量,如其他注释中所示,或者,最好使用这些函数和变量创建一个类/对象,并在其中工作。 – Peon