Par*_*ots 16
它们的相关性在于它们具有全局范围,但常量一旦定义就不会改变,不像页面可以随之修改的全局变量.因此,切换到使用define()而不是全局将无济于事.
如果你重构你的方法以将变量作为参数并依靠它来传递变量,那就更好了.
这里有一些事情.
首先,在php.ini中禁用的register_globals是指旧的PHP功能,其中通过查询字符串(GET)或表单(GET/POST)发送的任何变量都将转换为全局PHP变量.这是关闭register_globals时(并且应该)禁用的功能.即使关闭此选项,您仍可以在应用程序中定义全局变量.
在一般的编程术语中,全局变量(不是PHP的register_globals)被认为是"坏的",因为当你遇到一个程序员时,你不知道应用程序的其他部分可能正在使用或更改它,或者你对它的更改有何影响全球可能有.此外,如果您要定义一个新的全局变量,那么您可能会覆盖其他人依赖的现有变量.当变量在本地定义时(在单个函数中,或在其他语言中定义为单个块),您可以检查本地范围,并通常确定对该变量的更改将执行的操作.
另一方面,常数永远不会改变.你定义它们一次,它们保持定义,没有人可以改变它们.这就是为什么将全局常量视为"不太糟糕"而不是全局变量.
全局变量不是常量(您可以更改全局变量的值,但只能定义一次常量).
常量并不总是全局的(您可以在类中声明常量).
此外,全局变量可以是任何类型:标量,数组或对象.常量只能是标量.
我不会说常量或全局变量是好还是坏.如果使用得当,它们都有益.该register_globals功能存在安全问题,与更全面使用全局变量分开.