0

我试图直接从类中的静态属性调用函数。

这是我的课的摘录:

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在调用之前将函数名存储在临时变量 ( ) 中。我已经尝试将表达式(或表达式的位)包装在大括号中,({, }),括号((, )),前缀 a$等,但到目前为止没有任何效果。

有没有一种简单的方法可以在没有临时变量的情况下做到这一点?如果是这样,它适用于的最低 PHP 版本是多少?

4

1 回答 1

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()变量变量function_exists()

于 2018-04-04T04:54:34.957 回答