PHP中di容器上的常量

时间:2018-09-13 21:54:58

标签: php ioc-container

我看到最近在多个框架中使用了一种做法。它包括使用类常量而不是字符串在容器中注册对象。通常,按照以下示例添加对象。

$container[MyClass::name] = function(){
    // create object here
}

我通常使用一个字符串:

$container['MyClass'] = function(){
    // create object here
}

我想知道这种做法的便利性。

1 个答案:

答案 0 :(得分:1)

这与IDE的重构方式有关。

假设您有@bot.command() async def rename(ctx, name): await bot.user.edit(username=name)

然后您使用:

MyClass

如果重命名类“ MyClass”,则需要在所有使用该字符串的地方重命名该字符串。重构工具将很难确定字符串'MyClass',在这种情况下是对类的引用,而不是一段随机的请求。

如果您使用:

$container['MyClass'] = function(){
    // create object here
}

您需要重命名类MyClass,但是许多IDE(例如phpstorm,vscode等)都具有工具,可以在代码中的任何地方自动重命名(重构)对类的引用,并且因为您使用了类和不是一个字符串,他们会发现MyClass需要重命名。

这样,维护第二个要容易得多。