我有以下设置:
class test {
public static function something() {
$somethingElseFunction = "somethingElse";
// How can I call the method with the name saved in variable?
}
public static function somethingElse($a) {
echo 'bla';
}
}
如何使用变量调用函数? (函数名称在变量中)。 我还需要为它做一个function_exists()。
试过这个:
if (function_exists(self::$somethingElseFunction ())) {
if (!call_user_func(self::$somethingElseFunction , $a)) {
}
}
没用。
答案 0 :(得分:2)
在PHP>=5.4
中,您只能使用self::
取消引用:
self::$somethingElseFunction();
- 但在早期版本中会导致错误(因为不允许使用动态静态方法取消引用)。那么你总是可以使用诸如call_user_func_array()
之类的东西:
class test {
public static function something() {
$somethingElseFunction = "somethingElse";
call_user_func_array(array(__CLASS__, $somethingElseFunction), array("bla"));
}
public static function somethingElse($a) {
var_dump($a);
}
}
test::something();
- 这适用于PHP>=5.0
关于function_exists()
调用 - 它需要字符串作为参数,因此我建议使用method_exists()
- 因为该函数旨在执行这些操作:
public static function something() {
$somethingElseFunction = "somethingElse";
if(method_exists(__CLASS__, $somethingElseFunction))
{
call_user_func_array(array(__CLASS__, $somethingElseFunction), array("bla"));
}
}
答案 1 :(得分:1)
您应该可以使用以下内容:
test::$somethingElseFunction();
答案 2 :(得分:1)
使用此功能:
$classname = 'somethingElse';
call_user_func('test::' . $classname, $params);