我正在尝试直接从类中的静态属性调用函数。
以下是我班级的摘录:
class Uuid {
const VERSION_3 = 3;
const VERSION_5 = 5;
protected static $hash_function = [
self::VERSION_3 => 'md5',
self::VERSION_5 => 'sha1',
];
protected static function get_hash_value($value_to_hash, $version) {
// None of these work:
//$hash = self::$hash_function[$version]($value_to_hash);
//$hash = (self::$hash_function[$version])($value_to_hash);
//$hash = (self::$hash_function)[$version]($value_to_hash);
// Only this works:
$function = self::$hash_function[$version];
$hash = $function($value_to_hash);
return $hash;
}
}
到目前为止,我发现使其工作的唯一方法是在调用之前将函数名称存储在临时变量($function
)中。我已经尝试将表达式(或表达式的位)包装在大括号中,({
,}
),括号((
,)
),前缀为{{ 1}}等等,但到目前为止还没有任何效果。
有一种简单的方法可以在没有临时变量的情况下执行此操作吗?如果是这样,那适用于PHP的最低版本是什么?
答案 0 :(得分:0)
是的,正如您所发现的那样,您需要将函数名称存储为一个完整的字符串,作为一个简单的变量来调用它。可以在http://php.net/manual/en/functions.variable-functions.php
找到此功能的文档http://php.net/manual/en/function.call-user-func.php是另一种选择。
call_user_func( static::$hash_function[$version], $value_to_hash );
另请参阅is_callable(),call_user_func(),variable variables和function_exists()。