PHP中di容器上的常量

PHP中di容器上的常量,php,ioc-container,Php,Ioc Container,最近,我在几个框架中看到了一种实践。它包括用类常量而不是字符串注册容器中的对象。通常,对象会添加到下面的示例中 $container[MyClass::name] = function(){ // create object here } 我通常使用字符串: $container['MyClass'] = function(){ // create object here } 我想知道这种做法的作用。这与IDE如何进行重构有关 假设您拥有类MyClass 您可以使用: $co

最近,我在几个框架中看到了一种实践。它包括用类常量而不是字符串注册容器中的对象。通常,对象会添加到下面的示例中

$container[MyClass::name] = function(){
    // create object here
}
我通常使用字符串:

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

我想知道这种做法的作用。

这与IDE如何进行重构有关

假设您拥有类
MyClass

您可以使用:

$container['MyClass'] = function(){
    // create object here
}
如果重命名类“MyClass”,则需要在使用该类的任何地方重命名该字符串。重构工具将很难确定字符串“MyClass”,在本例中是对类的引用,而不是一段随机过程

如果您使用:

$container[MyClass::name] = function(){
   // create object here
}
您需要重命名类MyClass,但许多IDE(例如phpstorm、vscode等)都有工具可以自动重命名(重构)代码中任何地方对该类的引用,因为您使用的是类而不是字符串,所以他们会发现MyClass需要重命名

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