#php
#php
Вопрос:
В процессе автоматизации некоторого кода я хочу вызвать функцию, основанную на том, что такое строка.
Например, у меня есть переменная $somevar
, для которой установлена строка «This». Теперь я хочу запустить функцию doThis();
Итак, я надеялся, что смогу написать do.$somevar($var,$var2)
. Я хочу, чтобы она выполнялась doThis($var1,$var2)
.
Возможно ли это?
Комментарии:
1. диапазон возможностей для $somevar известен и ограничен или неизвестен и неограничен?
Ответ №1:
Для достижения этой цели вы можете использовать call_user_func.
call_user_func("do" . $somevar, $var1, $var2);
Вы также можете использовать is_callable для проверки условий ошибки.
if (is_callable("do" . $somevar)) {
call_user_func("do" . $somevar, $var1, $var2);
} else {
echo "Function do" . $somevar . " doesn't exist.";
}
Комментарии:
1. Насколько я знаю, call_user_func работает с любой вызываемой функцией, даже встроенной в функции php, такие как strtoupper, sprintf, …
2. @ChrisRamakers Вы правы, спасибо, что указали на это.
Ответ №2:
Я не думаю, что вы можете сделать это таким образом, но вы могли бы сделать:
call_user_func('do'. $somevar, $var, $var2);
или
$func = 'do' . $somevar;
$func($var, $var2);
Ответ №3:
Это совершенно законно в php
$myVar = 'This';
$method = 'do'.$myVar; // = doThis
$class = new MyClass();
$class->$method($var1, $var2, ...); // executes MyClass->doThis();
Ответ №4:
$fname="do$somevar";
$fname();
Но вам следует дважды подумать, прежде чем использовать это.
Ответ №5:
проверьте call_user_func или call_user_func_array
class myclass {
static function say_hello()
{
echo "Hello!n";
}
}
$classname = "myclass";
call_user_func(array($classname, 'say_hello'));
call_user_func($classname .'::say_hello'); // As of 5.2.3
Ответ №6:
В php вы используете -> вместо . это сработает:
$foo = new someObject;
$somevar = 'function_name';
$foo->$somevar('x');
Комментарии:
1. Я думаю, что Роланд использовал . в качестве оператора конкатенации строк