复杂的PHP应用程序提供数百种服务。每个服务都与一个服务标识符关联,通常是开发人员选择的字符串。例如,repository.users.sqlite
是配置为与 users 表(默认为 sqlite 实例)一起使用的UserRepository
类的实例。
我想避免不必要的输入,思考,CR辩论,复制/粘贴服务名称以及搜索代码库以找出标识符后面的内容。
我看到了一些选择,但是没有一个是完美的:
repository.users.sqlite
)并将其复制/粘贴到任何地方$di['users.service'] = new UsersService($di['repository.users.sqlite']);
const USERS_REPOSITORY_SQLLITE = 'repository.users.sqlite';
const USERS_SERVICE = 'users.service';
$di[self::USERS_SERVICE] = new UsersService($di[self::USERS_REPOSITORY_SQLITE]);
UserRepository::class
)作为服务标识符的命名方法。因此,没有必要创建一个常数或记住一些东西。此外,在这种情况下,IDE的代码完成功能也可以使用。$di[UsersService::class] = new UsersService($di[UsersRepository::class]); // default sqlite implementation is used here
答案 0 :(得分:0)
如果框架没有像Symphony那样强迫您使用字符串标识符,则我更喜欢使用 :: class 常量,原因是:
对于某些重复了相同的具体服务定义的异常,我将其用作标识符: MyClass :: name。 ':: customIdentifier';
顺便说一句:我已经在Symphony DI上工作了很多年,但是我还是喜欢我提到的这种方式(我现在正在使用)。