应该如何用 PSR-4 和 composer 来组织抽象继承的文件?

How should abstract inherited files be organized with PSR-4 and composer?

我想创建我自己的作曲家包,但在这样做之前,我试图更好地理解它应该如何组织,尤其是关于继承的抽象 类。

假设我有一些特定的项目,例如:

对于这些项目中的每一个,我都有控制器 类、模型 类、实体 类 和其他 类。

我还有一些抽象 类,例如 CarController、CarModel 等,MotorController、MotorModel 等,具体 类 是通过使用继承来扩展的。

合成将用于将零件注入汽车,将模型注入控制器等。

应该如何组织目录文件结构以及在这种情况下应该使用哪些命名空间?

并不是说我希望以下内容是正确的,但我会尝试一下,以便您可以更好地了解我目前对该主题的理解水平。我已经阅读了描述按原型 and/or 按功能分组的帖子,我相信我应该首先按功能进行分组。下面假定 NamespaceName 为 MyVendorName,SubNamespaceName 为 Car,文件路径为 /var/www/vendor。 那么也许我会这样做:

/var/www/vendor/my-vendor-name/src/Car/Controllers/AllMyAbstractControllers.php
/var/www/vendor/my-vendor-name/src/Car/Models/AllMyAbstractModels.php
/var/www/vendor/my-vendor-name/src/Car/Entities/AllMyAbstractEntities.php
/var/www/vendor/my-vendor-name/src/Car/Cars/SportsCar/AllSpecificSportsCar_Controller_Model_Entity_Classes.php
/var/www/vendor/my-vendor-name/src/Car/Cars/SedanCar/AllSpecificSedanCar_Controller_Model_Entity_Classes.php
/var/www/vendor/my-vendor-name/src/Car/Motors/V6Motor/AllSpecificV6Motor_Controller_Model_Entity_Classes.php
/var/www/vendor/my-vendor-name/src/Car/Motors/V8Motor/AllSpecificV8Motor_Controller_Model_Entity_Classes.php
etc, etc...

然后,我可以 \MyVendorName\Car\Cars\SportsCar\SportsCarController.php 扩展 \MyVendorName\Car\Controllers\CarController.php

我确定以上是错误的,只是作为示例提供的。应该如何用PSR-4和composer组织抽象继承文件?

Composer 和 PSR-4 都没有在这件事上提出任何建议 - 它们专注于技术方面,所以只要你不在 类 中使用不允许的字符,名称和文件结构与命名空间结构相匹配,他们对此很满意。

其实"how should I structure my classes/namespaces"这个问题没有一个正确答案。答案取决于个人喜好和项目的具体情况。如果你认为这个结构适合你的项目,那么就使用它——你是最了解这个项目的人,你会用得最多,所以你可能是这件事上最能干的人。