提问人:Crunch 提问时间:8/9/2021 最后编辑:Crunch 更新时间:8/9/2021 访问量:561
我们可以在 psr-4 composer 命名空间路径后手动添加子目录吗?
Can we add subdirectory manually after the psr-4 composer namespace path?
问:
我有不同版本的文件,这些文件存储在主文件夹内的单独子文件夹中。我打算使用基于动态确定值的子文件夹。
我可以为主文件夹创建一个 psr-4 composer 命名空间,然后根据需要将 for 子文件夹添加到其中吗?
我尝试关注,但它显示错误。$ver
$ver
文件结构:
web\
public\index.php
main\
V1\app.php
V2\app.php
V3\app.php
作曲家:
"autoload": {
"psr-4": {
"Application\\": "main"
}
}
索引 .php:
use Application;
$ver = "V2"; // suppose its V2 for now
$app = new "\Application\" . $ver . "\App()";
应用.php:
namespace Application;
class App {
}
答:
1赞
Maksim
8/9/2021
#1
您必须遵循 PSR-4 的类命名和应用结构:
composer.json
"autoload": {
"psr-4": {
"Application\\": "main"
}
}
main/V1/App.php
namespace Application\V1;
class App {}
对于具有动态名称的实例类,请使用下一个构造:
$ver = "V2"; // suppose its V2 for now
$appClass = "\Application\$ver\App";
$app = new $appClass;
在此处阅读有关此内容的更多信息
在这种情况下,我建议使用工厂模式:
class App implements AppInterface {}
class AppFactory
{
public static function makeApp(string $version): AppInterface
{
$appClass = "\Application\$version\App";
if(! class_exists($appClass){
throw new Exception("App version $version not exists");
}
return new $appClass;
}
}
评论
$app = new "\Application\" . $ver . "\App()";