Php 试图理解为什么拉威尔';s许多静态方法并不被认为是不好的做法

Php 试图理解为什么拉威尔';s许多静态方法并不被认为是不好的做法,php,laravel,Php,Laravel,我很困惑 我已经要求Reddit上的一些开发人员审查我的代码。看起来像这样 Template::load('register', array('error_message' => Language::translate('username_in_use')); 因此它加载register.php,用翻译替换{error_message}。(抱歉,此用户名正在使用中。请选择其他用户名。) 他们说使用太多的静态调用是一种糟糕的做法。然而,他们建议使用Laravel框架,它完全摆脱了$this

我很困惑

我已经要求Reddit上的一些开发人员审查我的代码。看起来像这样

Template::load('register', array('error_message' => Language::translate('username_in_use'));
因此它加载register.php,用翻译替换{error_message}。(抱歉,此用户名正在使用中。请选择其他用户名。)

他们说使用太多的静态调用是一种糟糕的做法。然而,他们建议使用Laravel框架,它完全摆脱了$this并使用静态调用


有人能解释一下,如果这是一个糟糕的实践,为什么Laravel是一个经典的框架?

静态无处不在,并且完全破坏了可测试性,因为您不能仅仅重置状态。此外,任何东西都可能以代码的其他方面无法预测的方式影响状态,从而导致极不可预测的行为

Laravel 4通过使用静态“正面”来防止这种情况。这些外观是“国际奥委会决议的语法简写”。它们既提供语法上的糖分,又防止代码紧密耦合

facades解析的类可以更改,并允许您注入模拟系统或任何您想要的东西

当然,这并不能真正解决静态访问的其他方面。。这就是你不能仅仅注入不同的功能。但是,对于Laravel应用程序,您通常不会在域中使用facade。这对于web传输层更为重要,因为web传输层已经与您的框架紧密耦合,这非常有帮助,它只是通过为应用程序的该层创建某种类似于DSL的东西来很好地利用这一事实


<>我重复一遍,请考虑不要在你的领域层中使用深部。

没有练习是坏的或好的,有一个时间和地方进行所有单元测试,这将是一个正确的痛苦。这就是为什么他们在这里被认为很糟糕的原因之一。但它也可读且简洁。