替代PHP中的全局变量

时间:2012-07-28 01:46:38

标签: php global-variables scope session-variables

由于速度缓慢(以及编码原因),我知道应尽可能避免使用全局变量。这是两倍慢,它减少了理解和跟踪代码流。但有时候,你的功能确实需要它们。有时,它们确实非常方便。

在某种程度上可以使用常数。但正如名称所说的那样,它们毕竟是常数,因此,它们不能完全取代全局变量的使用。

如果您不使用全局变量,并且由于它们提供的功能而需要使用它们,您会参考哪些选项? PHP中有哪些实用程序,以便可以在函数外部的函数内,基本上在任何地方和任何地方使用变量。将它设置在某个地方并在其他地方读取/修改它。

作为一个例子,我可以使用会话变量作为替代。

您可能会发现它很奇怪,但会话变量可以很容易地解决问题。它实际上比全局变量更好;我可以在我的函数中初始化我的会话变量,并且很快,我的代码的所有其他部分都能够使用该会话变量。对于全局变量,它们必须在函数范围之外(确切地说,在页面顶部)引入/定义,然后才能被其他部分使用。会话不会受到此限制。但是,很明显,Sessions不是实现目标的正确工具。

问题是有什么其他方法可以解决“在某处设置变量并在其他地方读取/修改变量”的问题?

2 个答案:

答案 0 :(得分:1)

如果您确实需要全局变量,那么您可以拥有一个使用单例模式的全局类:这是PHP http://www.talkphp.com/advanced-php-programming/1304-how-use-singleton-design-pattern.html中单例模式的示例

基本上,单例模式只允许在整个应用程序中共享的一个类实例,实际上为您提供了一个存储全局变量的全局类。

答案 1 :(得分:1)

回答你的问题“问题是,还有什么方法可以解决”在某个地方设置变量并在其他任何地方读取/修改它“的问题?”......那仍然忽略了这一点:你们重新定义一个全局变量。如果你正在构建一个需要从任何地方访问变量的应用程序,它的设计模式很可能存在固有的缺陷。

据说,做可能需要更多的东西作为一个例子,你可以建立一个基于set / get函数的“Bag”样式类;某些设置。只要您需要访问这些设置,就可以将该类注入。

相关问题