我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
变量。 类变量命名空间一点点好转,但几乎没有什么区别。 两者都可以访问任何地方在任何时间,都是全球性的状态。
碰巧,我只写了关于这个问题的详尽的文章:
如何不杀你的可测性使用静
所以,我的问题是,这将是更好的,为什么?
你已经感觉到有一些问题,把所有这一切到全局。 虽然你已经开发的一些想法来封装东西放到一个类。
我认为这是一个很好的起点。 让我们添加一些香料烹调得到这个更流畅的开头:
$data = new ArrayObject(array());
$data['page_title'] = 'Home';
你已经创建了一个对象,现在你可以沿着包含您的数据传递。 只是通过$data
到该地区需要的地方。 无全球或全局静态变量需要。
你甚至可以让这种类型的更具体后来由扩展ArrayObject
用自己的类型。
作为记录。
静态的优点:
代码的清晰度。 例如:
function fn() {
System::data()
}
与
function fn() {
global $system;
$system->data()
}
静态缺点:
- 如果您正在使用PSR-4,那么你必须添加(并包括)一个新的类(和一个新的文件)。 它的影响,即使你使用opcache(opcache aleviates它,但它不是魔术)的性能。
- 你必须定义一个代码块。