Есть ли способ вызова функции через переменные?php - вызов функции динамически
Например, я хочу вызвать функцию Login(). Могу ли я это сделать:
$varFunction = "Login"; //to call the function
Могу ли я использовать $ varFunction?
Есть ли способ вызова функции через переменные?php - вызов функции динамически
Например, я хочу вызвать функцию Login(). Могу ли я это сделать:
$varFunction = "Login"; //to call the function
Могу ли я использовать $ varFunction?
Да, вы можете:
$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() с правильным экземпляра модуля.
эй tks .. я думаю, что буду использовать это. есть ли возможность, что веб-хостинговая компания отключит эту функцию? – nuttynibbles
Это всего лишь сценарий, поэтому, если они отключить это, вы, вероятно, не сможете запустить какой-либо код. – maartenba
Вы можете использовать ...
$varFunction = "Login";
$varFunction();
... и это само собой разумеется, чтобы убедиться, что переменная является доверенным.
Эй, это тоже работает. однако, имеет значение между этим и call_user_func(); ?? – nuttynibbles
@nuttynibbles Нет, действительно, версия, о которой я упоминал, является более синтаксическим сахаром для вызова функции. Вероятно, есть некоторые незначительные отличия, но я не уверен, что. – alex
<?php
$fxname = 'helloWorld';
function helloWorld(){
echo "What a beautiful world!";
}
$fxname(); //echos What a beautiful world!
?>
Вы действительно должны рассмотреть возможность использования классов для модулей, так как это позволит вам и иметь последовательную структуру коды и сохранить имена методов одинаковы для нескольких модулей. Это также даст вам гибкость в наследовании или изменении кода для каждого модуля.
По этой теме, кроме методов вызова, указанных выше (то есть, используя переменные как имена функций, или call_user_func_ * семейство функций), начиная с PHP 5.3, вы можете использовать closures, которые являются динамическими анонимными функциями, которые могут предоставить вам с альтернативным способом делать то, что вы хотите.
Да, PHP поддерживает это. Но я бы настоятельно рекомендовал не использовать его, если вы не мазохист или не планируете саботаж –
привет, на самом деле причина этого в том, что я хотел бы иметь одно и то же имя функции, но для разных модулей. поэтому, например, модуль входа и модуль профиля имеют функцию вызова main() – nuttynibbles
Doh! ** Наследовать ** это! –