我不能传递变量,这将是太多的工作。
你确定吗?人们倾向于高估传递依赖关系的努力。如果您在构造函数中执行此操作,通常执行起来相当简单。
也就是说,您可以在 php.ini 中以不同的方式将共享功能放在全局范围内。最简单的是使用全局函数。例如。一个不属于任何类的函数。另一种选择是使用静态类方法。这两个非常相似;除了语法之外,它们本质上具有相同的属性。一个稍微松散的耦合解决方案是将功能作为方法放在(抽象)基类上,您的具体类从中扩展。这在所有子类之间共享功能。
上述解决方案的共同点是它们具有编译时耦合。您不能在运行时更改依赖关系,这会使您的应用程序相当僵化。它们的主要好处是它们的复杂性较低。
如果您想要一个松散耦合的应用程序,您可以尝试用变量替换硬依赖关系,以提供一定程度的间接性。最简单的方法是创建一个对象并使其在整个应用程序中全局共享。在 PHP 中有很多方法可以做到这一点,例如单例或只是全局范围内的变量(您可以使用global
关键字或通过$GLOBALS
数组访问它)。
虽然全局变量提供了一定程度的间接性,但它们也往往会引入很多复杂性,因为它们使得很难确定应用程序的哪些部分相互依赖。出于这个原因,有经验的程序员经常避免使用它们。如果变量具有状态,则尤其如此;如果共享对象是无状态的,这个问题就不那么普遍了。
避免全局变量危险的唯一方法是改用局部变量。例如。传递依赖关系。这可能有点麻烦,但根据我的经验,它通常没有想象的那么大。至少,好处往往大于问题。也就是说,有一些技巧可以减轻痛苦;尤其是依赖注入容器,它们是为您处理所有接线的自动工厂。虽然它们具有自己的复杂程度,但对于更大的应用程序,它们肯定是一个很好的解决方案。