基于php的__NAMESPACE__创建动态的工厂类
场景
- 主要用来应对增量相同的类
- 缺点就是IDE的补全和跳转问题,当然可以通过注释来解决
主要点
- 需要将工厂类固定到需要生产类命名空间下或者上级,固定位置的一个好处是,方便阅读
- 使用class_exist函数来判断指定类名的类是否存在
- 使用__NAMESPACE__来规避手动require和手动指定目录拼接
优雅demo
<?php
/**
* User: jenson
* Date: 2020/7/15
* Time: 0:20
*/
namespace App\Service\Factory;
class Factory
{
public static function get($name)
{
$name = ucfirst($name);
$class = __NAMESPACE__. '\\'. $name;
if (class_exists($class)) {
return new $class;
}
throw new \Exception("class {$name} not found");
}
}
# 同级目录可以放置生产类供工厂类生成
Factory::get('test1');
实际操作
- 如果只有确定几个类别,我觉得直接
switch
得了,没必要写得如此灵活。 - 比如laravel framework的manager们创建工厂类都是通过method设定好,比如
\Illuminate\Cache\CacheManager::createArrayDriver