Классический пример того, почему использование статики в качестве глобалов (в данном случае функций) - плохая идея, независимо от языка.
Самый надежный метод - создать несколько подклассов реализации абстрактного базового класса "Action".
Затем, чтобы попытаться устранить некоторые неудобства создания экземпляра класса просто для вызова его методов, вы можете обернуть его в какой-нибудь фабрике.
Например:
abstract class AbstractAction {
public abstract function do();
}
class FooAction extends AbstractAction {
public function do() {
echo "Do Foo Action";
}
}
class BarAction extends AbstractAction {
public function do() {
echo "Do Bar Action";
}
}
Затем создайте фабрику, чтобы «помочь» в реализации функции
class ActionFactory {
public static function get($action_name) {
//... return AbstractAction instance here
}
}
Тогда используйте его как:
ActionFactory::get('foo')->do();