我处于需要存储每个访问者IP地址以进行某些处理的情况。我知道会话可以很好地完成工作,但我不希望这些数据存储在任何形式的cookie,会话中。一旦页面存在/关闭,我就需要销毁这些数据。
因此,我的目的是创建一个global.php
文件并将其存储在一个变量中,然后将该文件放在每个页面的顶部。 (不好的做法,我知道)
现在,我可以通过两种方式在此文件中存储信息。一个是使用global $var
(这是没有意义的,因为它可以在任何地方访问),另一个只是简单地初始化$variable
现在,因为这个global.php
文件将被添加到顶部对于每一页,它都具有使用超级全局变量的优点。
现在,如果你问为什么我刚开始使用global $var
是因为,我一直听到它们有多糟糕,应该避免它们......
所以,在这个负面的谈话中,使用global $var
的优势已经减少,现在我看不出,在这种情况下使用什么更合适。
当您在文件中声明变量并在每个脚本中共享该文件时,无论您是按原样声明该变量还是使用global
关键字,它都会产生什么差异(性能)。
答案 0 :(得分:1)
幸运的是,PHP已经在超级全局数组中提供用户的IP地址,每个函数都可以访问它:
$_SERVER['REMOTE_ADDR']
您无需担心创建备用全局变量来存储此数据。
那就是说,我认为你可能会对包含GLOBALS
文件的内容产生误解。脚本初始化或修改后的变量将在脚本完成后立即过期......只有页面上的所有函数都可以访问它时,它才是全局变量。 global
或$GLOBALS
变量仅存在于当前脚本(页面)的范围内。如果您希望在多个页面上共享变量,必须使用会话或类似会话方法(也就是说必须从服务器文件系统或数据库中存储和检索变量。
如果您只是担心读取变量和从全局数组中读取变量之间的性能差异,答案是“不要担心” - 技术上读取全局数组应该更慢,但是在我所看到的所有基准测试中,即使处理大量变量,也没有实际的性能差异。
如果你有趣的话,为什么你一直听到人们喋喋不休地谈论全局变量,read this article by Tom Hudson - 基本上有几种不同的方法可以在使用全局变量时遇到麻烦(特别是在大的情况下,复杂系统)但它非常依赖于案例细节。