2017-01-23 134 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