使用“use”语句加载类时使用变量

Using a variable when loading a class with the "use" statement

提问人:Zero 提问时间:2/18/2022 更新时间:2/19/2022 访问量:128

问:

我正在做一个 Laravel 项目,这将是一个完整的 API 项目。我已经给自己编写了一种进行 API 版本控制的方法。我通过在 Laravel 的架构中添加版本号来构建我的项目。

例如,我正在处理我的 API 的 V0,我将使用我的模型来使用这个架构:App\Models\V0\MyModel

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

use App\Models\V0\User;

是否有可能以某种方式将“V0”放入变量中,并在“使用”中使用它来动态加载模型的良好版本?

PHP Laravel 命名空间 Laravel-8

评论


答:

1赞 Anton Sukhachev 2/19/2022 #1

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

<?php

namespace App\Models;

use App\Models\V0\User as UserV0;
use App\Models\V1\User as UserV1;


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

并使用它

<?php

use App\Models\UserFactory;

$version = 0;
$user = UserFactory::get($version);