Php - вызов функции динамически

Есть ли способ вызвать функцию через переменные?

Например, я хочу вызвать функцию Login(). Могу ли я сделать это:

$varFunction = "Login"; //to call the function

Можно ли использовать $varFunction?

Ответ 1

Да, вы можете:

$varFunction();

Или:

call_user_func($varFunction);

Убедитесь, что вы проверяете $varFunction для вредоносного ввода.


изменить:

Для ваших модулей рассмотрите что-то вроде этого (в зависимости от ваших реальных потребностей):

abstract class ModuleBase {
  public function main() {
    echo 'main on base';
  }
}

class ModuleA extends ModuleBase {
  public function main() {
    parent::main();
    echo 'a';
  }
}

class ModuleB extends ModuleBase {
  public function main() {
    parent::main();
    echo 'b';
  }
}

function runModuleMain(ModuleBase $module) {
  $module->main();
}

И затем вызовите runModuleMain() с правильным экземпляром модуля.

Ответ 2

Вы можете использовать...

$varFunction = "Login";
$varFunction();

... и само собой разумеется, чтобы убедиться, что переменная доверена.

Ответ 3

 <?php
  $fxname = 'helloWorld';

  function helloWorld(){
    echo "What a beautiful world!";
  }

  $fxname(); //echos What a beautiful world!
?>

Ответ 4

Вам действительно стоит рассмотреть использование классов для модулей, поскольку это позволит вам иметь согласованную структуру кода и сохранять имена методов для нескольких модулей. Это также даст вам гибкость в наследовании или изменении кода для каждого модуля.

В этой теме, кроме методов вызова, указанных выше (то есть, используя переменные как имена функций, или call_user_func_ * семейство функций), начиная с PHP 5.3 вы можете использовать закрытия, которые являются динамическими анонимными функциями, что может предоставить вам альтернативный способ сделать то, что вы хотите.