Вызов функции из статического свойства в переполнении стека

Я пытаюсь напрямую вызвать функцию из статического свойства внутри класса.

Вот выдержка из моего класса:

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) прежде чем звонить. Я попытался обернуть выражение (или биты выражения) в фигурные скобки, ({,}), скобки ((,)) с префиксом $и т.д. но пока ничего не получалось.

Есть ли простой способ сделать это без временной переменной? Если да, то для какой минимальной версии PHP это работает?

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 ().

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]