Используйте переменную для определения функции PHP - PullRequest
18 голосов
/ 27 августа 2011

Я хотел бы динамически называть несколько функций, используя переменные, например:

$thing = 'some_function';

function $thing() {
    echo 'hi!';
}

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

$something = 'function_exists';

if( $something('print_r') ) {
    echo 'Yep';
}

Но лучший пример не работает для меня.

Есть идеи?

Я использую систему с модулями.Каждый модуль представляет собой отдельный php-скрипт, который можно добавить или удалить из определенной папки.

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

Я использую существующую систему и не могу переписать обработку модуля.

В качестве альтернативы можно было бы просто написать все функции init и жестко их кодировать, но по мере роста списка увеличивается и код - и если модуль убирается, появляются ошибки.

1 Ответ

18 голосов
/ 27 августа 2011

Что вы можете сделать:

$thing = 'some_function';
$$thing = function() {
   echo 'hi';
};
$some_function();

В php <5.3 вам придется использовать <a href="http://php.net/create_function">create_function вместо анонимной функции :

// Use this in < 5.3
$thing = 'some_function';
$$thing = create_function('',
   'echo "hi";'
);
$some_function();

При этом определение функций с динамическими именами - плохая идея.Вместо этого создайте массив функций, к которым вы обращаетесь, или используйте полиморфизм.

...