2017-01-23 3 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, он повторяет только "Томаты & Лук" Isnt $arg1 и $arg2 глобальный? Почему они не видны внутри функции func2? Как я могу позвонить $var1 внутри func2 вместе со своими аргументами?

+0

использовать глобальные $ arg1, $ arg2 внутри func2 – coder

+0

** Isnt $ arg1 и $ арг2 глобальный? ** Да. По умолчанию глобальные переменные недоступны внутри функций. – 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

Да, строки1 и arg1 имеют одинаковую область действия и находятся за пределами области функций. Однако с этой строкой: func2 ($ string1, $ string2, $ var1); вы добавляете String1 и String2 в область func2 (через параметры), а $ arg1 все еще находится за пределами области ваших функций. Если он не передается как параметр или не объявлен как глобальный, как я сделал выше, это не сработает. – Kaylined

Смежные вопросы