I have different versions of files which are stored in separate subfolders inside a main folder. I intend to use subfolder based on a dynamically determined value of $ver
.
Can I create a psr-4 composer namespace for the main folder and then add to it the $ver
for subfolders as needed.
I tried following but its showing errors.
File Structure:
web publicindex.php main V1app.php V2app.php V3app.php
Composer:
"autoload": { "psr-4": { "Application\": "main" } }
index.php:
use Application; $ver = "V2"; // suppose its V2 for now $app = new "Application" . $ver . "App()";
app.php:
namespace Application; class App { }
Advertisement
Answer
You must follow PSR-4 for class naming and app structure:
composer.json "autoload": { "psr-4": { "Application\": "main" } } main/V1/App.php namespace ApplicationV1; class App {}
For instance class with dynamic name use next construction:
$ver = "V2"; // suppose its V2 for now $appClass = "Application$verApp"; $app = new $appClass;
Read more about this here
And i recommend to use factory pattern for this case:
class App implements AppInterface {} class AppFactory { public static function makeApp(string $version): AppInterface { $appClass = "Application$versionApp"; if(! class_exists($appClass){ throw new Exception("App version $version not exists"); } return new $appClass; } }