首页 > 解决方案 > Composer - 根据 PHP 版本在运行时修改自动加载 SRC

问题描述

我想知道是否有办法根据 php 版本加载不同的文件夹。我可以编写自己的自动加载器来做到这一点,但我想知道是否有办法为此使用作曲家?

附言。我以前在模块/插件应用程序中看到过这种情况,它在全球范围内重新分布以与广泛的环境一起使用。那些使用自己的自动加载类的脚本。

我是古玩有没有办法以类似的方式使用作曲家。

场景:类/文件夹结构:

class >
   php5.6 >
      - SomeClass.php
      ...
   php7.x >
      - SomeClass.php
      ...
   php8.x >
      - SomeClass.php
      ...

比较php版本并做一些事情:

$classPathForAutoloader = '';
if (version_compare(PHP_VERSION, '8.0.0') >= 0) {
  $classPathForAutoloader = 'php8.x';
  // do something to composer autoload or 
  // use declaration
}else if(version_compare(PHP_VERSION, '7.0.0') >= 0){
  $classPathForAutoloader = 'php7.x';
  // do something to composer autoload or 
  // use declaration
}else if(version_compare(PHP_VERSION, '5.6.0') >= 0{
  $classPathForAutoloader = 'php5.6';
  // do something to composer autoload or 
  // use declaration
}else{
    // throw Exception ...
}

标准作曲家设置:

{
    "name": "some/name",
    "require": {
    },
    "authors": [
        {
            "name": "Some Name",
            "email": "some@email.com"
        }
    ],
    "autoload": {
        "psr-4": {
            "Devwl\\": "class/",
            "Tools\\": "tools/"           
        },
        "classmap": [
            "class/"
          ],
        "exclude-from-classmap": []
    }
}

标签: phpcomposer-phpautoload

解决方案


我不认为 Composer 提供了一种动态自动加载不同路径的方法。

您能否仅在功能因 PHP 版本而异的情况下version_compare在单个类中使用?SomeClass.php还是写整个SomeClass.php向后兼容?

对我来说,根据 PHP 版本加载不同的类在跨环境的可重现性方面是自找麻烦。

另一种选择是使用require_once加载不同的类,但为了可维护性,我真的倾向于仅在绝对必要时使用带有版本检查的单个类。


推荐阅读