2017-01-23 222 views
-1

我想在一个函数中调用一个变量函数,但它不像预期的那样工作。如何在带参数的函数中调用变量函数?

这里是我的代码:

$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以及它的参数?

+0

利用全球$ ARG1,里面FUNC2 – coder

+0

$ ARG2 **心不是$ ARG1和ARG2 $全球?**是。默认情况下,全局变量不能在函数内部访问。 – Barmar

+0

'func2'不包含'func1' **里面的**,也不包含变量。您可以将它们定义为全局变量,如其他注释中所示,或者,最好使用这些函数和变量创建一个类/对象,并在其中工作。 – Peon

回答

3

由于变量范围的原因,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); 
} 

http://php.net/manual/en/language.variables.scope.php

+0

是不是$ string1和$ arg1具有相同的作用域?为什么我需要为$ arg1声明全局? –

+0

是的,string1和arg1具有相同的作用域,并且都在函数作用域之外。然而,用这行代码:func2($ string1,$ string2,$ var1);您将String1和String2添加到func2的作用域中(通过参数),而$ arg1仍然在函数作用域之外。除非它是作为参数传递或者像上面那样声明为Global,否则它将不起作用。 – Kaylined