使用switch-case按类型创建不同的对象?

时间:2016-03-18 02:50:03

标签: php oop phpstorm

每个人都很开心,

我们使用if-else或switch-case等许多语句来创建不同的对象,具体取决于不同的条件,如:

interface Job {
    public function do();
}

class Auto implement Job {
    ...
}

class Month implement Job {
    ...
}

...
// another script to run jobs
...
switch($type) {
    case 'auto':
        $instance = new Auto();
        break;
    case 'month':
        $instance = new Month();
        break;
    default:
        throw new Exception('not support type!');
}

$instance->do();

问题是如果我们使用if-else / switch-case使代码越来越快,代码越来越多 我们可以使用反射或动态实例启动,但IDE(如PHPStorm)将无法找到类使用情况。
有没有更好的方法来反对使用switch-case?

1 个答案:

答案 0 :(得分:0)

真的有两个答案。

您应该键入提示$instance作为接口Job。这就是OOP中Interface的全部目的。您可以使用以下内容执行此操作:

switch ($type) {
    case 'auto':
        $instance = new Auto();
        break;
    // ...
}

/** @var \Job $instance */
$instance->do();

如果您想要使用该路线,您可以为PHPStorm提供类型提示工厂方法的元数据。元数据文件可以像代码https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata

一样提交给源代码控制