Мне не нравится function_exists('fun_name')
, потому что оно основано на том, что имя функции превращается в строку, плюс вам нужно назвать его дважды. Может легко порваться с рефакторингом.
Объявите вашу функцию как лямбда-выражение (я не видел упомянутое решение):
$generate_salt = function()
{
...
};
И используйте таким образом:
$salt = $generate_salt();
Затем при повторном выполнении указанного PHP-кода функция просто перезаписывает предыдущее объявление.