php - PHP 中的全局变量与静态变量

标签 php static global-variables

我正在用 PHP 创建一个基本框架。我需要将当前页面的数据传递给不同的函数,允许它们修改并保存它,然后将其传递回要显示的页面。我最初计划将数据存储在像 $GLOBALS['data'] 这样的全局变量中,但我开始认为使用全局变量是一个坏主意。所以我想,我应该在系统类中放置一个静态变量,并使用 system::$data 访问它。所以,我的问题是,哪个更好,为什么?

这个:

$GLOBALS['data'] = array();
$GLOBALS['data']['page_title'] = 'Home';
echo $GLOBALS['data']['page_title'];

或者这个:

class system
{
    public static $data = array()
}

function data($new_var)
{
    system::$data = array_merge(system::$data, $new_var);
}

data(array('page_title' => 'Home'));
echo system::$data['page_title'];

最佳答案

全局变量和public static变量之间确实没有区别。类变量的命名空间稍微好一点,但这几乎没有任何区别。两者都可以随时随地访问,并且都是全局状态。

碰巧,我刚刚写了一篇关于该主题的详尽文章:
How Not To Kill Your Testability Using Statics

关于php - PHP 中的全局变量与静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13310949/

相关文章:

r - R 中包中的全局变量

php - 解析错误 : syntax error, 意外 T_IS_GREATER_OR_EQUAL

c++ - 静态类数据成员和构造函数

php - 警告 : implode() [<a href ='function.implode' >function. 内爆</a>]:传递的参数无效

c++ - 在 C++ 中全局初始化类的正确方法

c - 存在 static 关键字时出现意外输出

multithreading - 如何正确使用线程专有数据

c++ - DLL 中的全局指针

php - 使用PHP获取目录中文件的最后修改日期

php - 根据 POST 数据重新加载表