Что касается передачи функции с предзаполненными аргументами, то это похоже на каррирование, которое можно сделать через замыкание.
Вызов статического метода ClassName::funcName() вернёт функцию, которую можно будет вызвать.
class ClassName
{
function static funcName($param1, $param2)
{
return function() use($param1, $param2){
mysqli_query("SELECT * FROM tablename WHERE name = $param1 AND id = $param2");
}
}
function funcNameSecond()
{
$parametrizrd_func = ClassName::funcName("John", 1);
$res = blablabla->cache($parametrizrd_func);
}
}