使用"use"语句加载类时使用变量



我正在做一个Laravel项目,它将是一个完整的API项目。我为自己编写了一种实现API版本控制的方法。我通过在Laravel的体系结构中添加版本号来构建我的项目。

例如,我正在我的API的V0上工作,我将使用我的模型来实现这个架构:App\models\V0\MyModel

我想知道我是否有机会,根据API的当前版本(设置在中间件中(,根据使用语句中的当前变量加载模型?例如:

use AppModelsV0User;

有可能以某种方式储存";V0";转换为变量,并在";使用";动态加载模型的好版本?

如果你真的想这样做,你可以为你的模型创建一个工厂。

<?php
namespace AppModels;
use AppModelsV0User as UserV0;
use AppModelsV1User as UserV1;

class UserFactory {
public static function get(int $version) {
switch($version){
case 0:
return new UserV0();
case 1:
return new UserV1();
}
}
}

然后使用

<?php
use AppModelsUserFactory;
$version = 0;
$user = UserFactory::get($version);

最新更新