该消息将有关编程的基本知识-全局对象。 我想说这是我要讨论的科学问题。 因此,为了不“束手无策”,程序员不要在全球范围内进行编程。 好吧,一切都清楚且极其简单,请讲这个吗? 没有这个东西。 如您所知,任何动作都会导致一系列事件和逻辑后果。
首先,为什么要创建无法创建的教条? 相反,让我们为PHP语言创建一个stop_globals()函数。 该框架在执行其代码的开始就可以执行它,并且进一步尝试使用全局范围将导致PHP错误。 这个解决方案好吗?
那远不是所有可以讨论的。
出现上述教条的主要原因是可能会意外覆盖全局变量的值,而这又可能导致程序中难以定位的错误。 如果可以将全局变量用于读取,但不能用于写入呢?
让我们关注周围的宇宙。 其中有全局对象:空间,时间,物质,能量,可能还有暗物质和能量。 类似地,根据我在Web编程中的经验,有许多对象使用依赖注入很不方便,而这些对象本质上是全局的。 这是数据库通信对象,USER对象等。 要使用此类对象,可以在PHP中引入super('sky','user')函数,该函数将使$ sky和$ user变量成为超全局变量,例如$ _GET或$ _POST。
这样的解决方案并不比传统的教条“不可能在全局领域编程”更糟,因为将数据立即写入到此类变量中,PHP会给出错误,其优点如下:
- 从概念上讲,全局对象保持全局,程序看起来更简单
- 这种方法更具生产力。 直接访问变量比将其值预先传递到堆栈要快得多。 这意味着处理器堆栈,编译器使用它来传递函数参数。 一种或另一种方式是,DI模式的实现会占用所用资源的开销。
如您所知,鉴于PHP项目提供了许多编程方法,大量的函数和类,大量的实验代码,这些项目随着时间的推移而经过评估,并且将来可以开发或删除,因此它本身就是一头大象。 在这方面,我请自由思考的人对以下问题发表理性意见:
- 您是否支持引入实验功能super()和stop_globals()?
- 您总体上对上述想法有何看法?
没有圣战,谢谢。
最后,我想指出我对laravel和编程模式危险的观察。 如您所知,laravel被称为
“反模式库” 。 我相信这个事实,以及其作者的自由思考,使这个项目变得如此受欢迎。 模式非常适合程序员进行交流,以指向某些编程实体。 但是它们有害,使程序员困惑,不允许程序生效。 让我们简化编程。