每个人都很开心,
我们使用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?
答案 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
一样提交给源代码控制