<?php

class FunctionHolder
{

    private $functions;

    public function __construct()
    {
        $this->functions = [];
    }

    /**
     * @param callable $function
     * @param string $functionName
     * @throws Exception
     */
    public function registerFunction($function, $functionName)
    {
        if (!is_callable($function)) {
            throw new Exception ('Not a function');
        }
        $this->functions[$functionName] = $function;
    }

    /**
     * @param string $functionName
     * @param array $parameters
     */
    public function run($functionName, $parameters)
    {
        call_user_func_array($this->functions[$functionName], $parameters);

    }
}

$functionHolder = new FunctionHolder();
/**
 * @param int $number
 * @param string $string
 */
$function = function ($number, $string) {
    echo "Номер $number";
    echo "\nСтрока $string";
};
$functionHolder->registerFunction($function, 'printNumbers');
$functionHolder->run('printNumbers', [12, 'попугай']);