如何在PHP中基于变量调用正确的对象类


How to call the right object classes based on variable in PHP?

情况

使用PHP 5.5,

我允许我的用户提交一个具有下拉列表的表单。

根据下拉列表,我将为特定操作调用不同的类。

怎么了

目前,我使用switch案例,但类的数量现在将从目前的3个激增到25个。开关盒很难看。

这是我的代码

    // call the right reader based on vendor
    switch($vendor) {
        case 'A':
            $vendorReader = new AReader();
            break;
        case 'B':
            $vendorReader = new BReader();
            break;
        case 'C':
        default:
            $vendorReader = new CReader();
            break;
    }

我特意用这种方式命名这些类,因此使用变量$vendor来调用相关$vendorReader类的构造函数更容易。

基于变量调用正确的读取器类的好方法是什么?

如果用户选择来自下拉列表,那么我可以通过GET/POST推断它也来自表单吗?在这种情况下,你可以不使用菜单的名称吗?

if (isset($_POST['my_class_selection_dropdown)) {
     $selection = $_POST['my_class_selection_dropdown];
     if(class_exists($selection)) {
         $vendorReader = new $selection();
     }
   }
}