php - 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": []
}
}
解决方案
我不认为 Composer 提供了一种动态自动加载不同路径的方法。
您能否仅在功能因 PHP 版本而异的情况下version_compare
在单个类中使用?SomeClass.php
还是写整个SomeClass.php
向后兼容?
对我来说,根据 PHP 版本加载不同的类在跨环境的可重现性方面是自找麻烦。
另一种选择是使用require_once
加载不同的类,但为了可维护性,我真的倾向于仅在绝对必要时使用带有版本检查的单个类。
推荐阅读
- javascript - 如何使输入成为视图的默认输入字段?
- linux - 没有可用的包 kernel-devel-3.10.0-957.el7.x86_64
- javascript - 在 VS Code 中反应建议
- c# - 如何使文本文件的内容在通过本地状态文件夹内的记事本打开时看起来加密且不可编辑
- php - 共享访问:如何修复“fread():长度参数必须大于 0”?
- laravel - 如何在 Laravel Eloquent 中加入 3 个以上的表
- spring - org.springframework.beans.factory.BeanCreationException:创建类路径资源中定义的名称为“securityInterceptor”的bean时出错
- python-3.x - 你如何打印在循环类中找到的变量
- laravel - Laravel,关系为空
- android - 边框半径在三星 Galaxy J7 中不起作用