2016-08-02 1 views
1

Я пробовал искать везде для этого, или, возможно, это просто невозможно сделать?Как динамически определять вложенную функцию PHP с использованием параметров родительской функции

Так сказать, я хочу иметь функцию, которая используется для создания других функций, которые имеют новое имя функции на основе переданного аргумента, это даже возможно?

Я продолжаю получать функцию undefined. Помимо способности currying вы можете назвать вложенную функцию параметром и вернуть вложенную функцию, которая будет вызвана позже (по имени, которое вы дали ему в параметре)?

function maker_of_functions($secFuncName, $foo) { 
    $secFuncName = function($bar) { 
     $fooBar = $foo + $bar; 
    } 
    return $secFuncName(); 
} 

Позднее в коде вызова:

maker_of_functions('adder', 3); 
echo adder(5); 
+0

возгласы, что была опечатка исправлена ​​в редактировании. – Secular12

+0

Если вам нужно каррирование - может быть, ищите? –

+1

Возможный дубликат [Можно ли вызывать вызовы метода curry в PHP?] (Http://stackoverflow.com/questions/1609985/is-it-possible-to-curry-method-calls-in-php) –

ответ

2

Использование родительского параметров функции

Чтобы создать новую функцию, которая использует материнскую функцию Params, вы можете использовать замыкание:

function maker_of_functions($foo) { 
    // notice the "use" keyword below 
    return function($bar) use ($foo) { 
     return $foo + $bar; 
    }; 
} 

, а затем использовать его:

$adder = maker_of_functions(3); 
echo $adder(5); 

Именование функция

Замыкание это анонимная функция. У него нет имени. Он существует как (я думаю) ссылка только на функцию, которая содержится в переменной. Если вы хотите динамически с именем переменной, вы можете:

$name = "myNewNamedFunction"; 
$$name = maker_of_functions(3); 

echo $myNewNamedFunction(6); 

Дополнительная информация

+0

Большое спасибо, все будет хорошо! Работает точно так, как мне нужно. – Secular12

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