Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中全局变量的替代方案_Php_Global Variables_Scope_Session Variables - Fatal编程技术网

PHP中全局变量的替代方案

PHP中全局变量的替代方案,php,global-variables,scope,session-variables,Php,Global Variables,Scope,Session Variables,由于速度慢(以及出于编码原因),我知道应该尽可能避免使用全局变量。它的速度是原来的两倍,并且降低了对代码流的理解和跟踪。但有时,您确实需要在函数中使用它们。有时候,它们确实很方便 在某种程度上,可以使用常数。但顾名思义,它们毕竟是常量,因此,它们不能完全替代全局变量的使用 如果您不使用全局变量,并且由于它们提供的功能,您确实需要使用它们,您会参考哪些选项?PHP中有哪些实用程序,可以在函数内部、函数外部、基本上在任何地方使用变量。将其设置在某个位置,然后在其他位置读取/修改 例如,我可以使用会话

由于速度慢(以及出于编码原因),我知道应该尽可能避免使用全局变量。它的速度是原来的两倍,并且降低了对代码流的理解和跟踪。但有时,您确实需要在函数中使用它们。有时候,它们确实很方便

在某种程度上,可以使用常数。但顾名思义,它们毕竟是常量,因此,它们不能完全替代全局变量的使用

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

例如,我可以使用会话变量作为替代

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


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

如果您确实觉得需要全局变量,您可以拥有一个使用单例模式的全局类:下面是PHP中单例模式的一个示例


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

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

也就是说,为了更恰当地完成您可能需要的任务,您可以构建一个“包”例如,使用set/get函数对基于的类进行样式化;某些设置。在需要访问这些设置的任何地方注入该类。

如果您甚至认为需要全局变量,并且试图使用黑客的替代方法,那么您的编码可能不正确。几乎没有一种情况需要它们,甚至根本没有帮助。我同意@Lusitanian的观点,如果你使用globals,那么你需要重新思考你的开发方式。@Lusitanian,有很多理由可以让全局变量派上用场。有些人选择将配置或日志类的实例放在那里。我不认为这有什么问题。全局变量是否普遍过度使用?绝对地把很多东西放在那里好吗?当然不是。是否存在使用它们的利大于弊的情况?当然。我完全同意它们应该只在特定情况下使用,但我不认为反对将任何东西保持全球化的强烈反对也没有理由。@Brad“几乎从不”=/=从不。设置是一个合理的用途。@Lusitanian,同意,我只是想展示另一面。singleton只是一种使用全局/静态变量的聪明方法,是一种反模式。使用依赖注入。@Lusitanian,你能提供一个例子吗。@Brad的依赖注入?本质上依赖注入+依赖容器(在答案中添加对这两个容器的引用可能是个好主意)。我自己使用依赖性容器,但有些人认为这类类类很糟糕,因为仅仅通过传递容器很难判断每个类/函数的实际依赖性是什么。(见:)