当前位置:  开发笔记 > 后端 > 正文

为什么不使用全局(美元符号$)变量?

如何解决《为什么不使用全局(美元符号$)变量?》经验,为你挑选了2个好方法。

我现在正在攻击Rails一年半,我非常喜欢它!:)

在rails中,我们大量使用局部变量,实例变量(如@user_name)和初始化器中定义的常量(如FILES_UPLOAD_PATH).但为什么没有人使用全球"美元化"变量($)$dynamic_cluster_name

是因为设计缺陷吗?它与性能有关吗?安全漏洞?



1> P Shved..:

是因为设计缺陷问题吗?

设计...... 缺陷?这是一个设计的祝福,设计的恩惠,设计的优点,一切,但缺陷!全局变量很糟糕,它们在Web应用程序中尤其糟糕.

使用全局变量的意义在于保持和改变" 全球状态 ".它在一个简单的单线程脚本中运行良好(不,不好,它工作糟糕,但仍然有效),但在Web应用程序中却没有.大多数Web应用程序运行并发后端:即通过公共代理和负载均衡器响应请求的多个服务器实例.如果更改全局变量,则仅在其中一个服务器实例中进行修改.从本质上讲,当您使用rails编写Web应用程序时,美元符号变量不再是全局变量.

然而,全局常量仍然有效,因为它们是常量,它们不会改变,并且在不同的服务器中有几个实例是可以的,因为它们在那里总是相等的.

要存储可变的全局状态,您必须使用更复杂的工具,例如数据库(SQL和noSQL; ActiveRecord是一种非常好的方式来访问数据库,使用它!),缓存后端(memcached),甚至普通文件(在极少数情况下它们很有用)!但全局变量根本不起作用.



2> hammar..:

全局变量通常是设计错误的标志,并且可能是由于并发问题导致的错误源.全局常量实际上没有这些问题.

不要使用全局变量,而应考虑使用单例或类变量.这样,您可以将对共享状态的访问限制为代码的一小部分,从而更容易避免这些问题.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有