PHP中的全局变量被认为是不好的做法? 如果是这样,为什么?
function foo () {
global $var;
// rest of code
}
在我的小型PHP项目中,我通常采用程序化的方式。 我通常有一个包含系统配置的变量,当我在功能中访问这个变量时,我会执行global $var;
。
这是不好的做法吗?
当人们谈论其他语言的全局变量时,它意味着与PHP中的不同。 这是因为PHP中的变量不是全球性的。 典型的PHP程序的范围是一个HTTP请求。 会话变量实际上具有比PHP“全局”变量更广的范围,因为它们通常包含许多HTTP请求。
通常(总是?),你可以像preg_replace_callback()
这样的方法调用成员函数:
preg_replace_callback('!pattern!', array($obj, 'method'), $str);
查看更多回调。
关键是对象已经被锚定到PHP上,并在某些方面导致一些尴尬。
不要过分关注将不同语言的标准或结构应用于PHP。 另一个常见的错误是试图通过将对象模型放在一切之上来将PHP变成纯粹的OOP语言。
与其他任何东西一样,使用“全局”变量,过程代码,特定框架和OOP是有意义的,可以解决问题,减少需要编写的代码数量或使其更易于维护和更易理解,而不是因为您认为你应该。
全局变量如果不谨慎使用会使问题更难以找到。 假设你要求一个php脚本,并且你得到一个警告,说你试图访问某个函数中不存在的数组的索引。
如果你试图访问的数组是本地的函数,你检查函数,看看你是否犯了一个错误。 这可能是一个输入到函数的问题,因此您需要检查调用该函数的位置。
但是,如果该数组是全局变量,则需要检查使用该全局变量的所有位置,而不仅仅是这样,您必须找出访问全局变量的那些引用的顺序。
如果你在一段代码中有一个全局变量,那么很难分离出该代码的功能。 你为什么要分离功能? 所以你可以测试它并在别处重用它。 如果你有一些代码你不需要测试,并且不需要重用,那么使用全局变量就没有问题。
我同意cletus。 我会添加两件事:
最好的问候,不要
链接地址: http://www.djcxy.com/p/92665.html上一篇: Are global variables in PHP considered bad practice? If so, why?
下一篇: Scraping html tables into R data frames using the XML package