PHP $ GLOBALS建议

时间:2011-03-23 14:46:52

标签: php globals

我注意到Interspire Shopping Cart将很多类初始化为PHP的$ GLOBALS变量。这样做有任何性能或安全问题吗?

下面是一个假文件,但写的类似于Interspire Shopping Cart的文件。

<?php 
// account.php

$GLOBALS['USER_ACCOUNT'] = new USER_ACCOUNT();
$GLOBALS['USER_ACCOUNT']->createPage(); //creating the page

?>

我注意到在创建页面的过程中(见上文),其他包含的文件需要访问$ GLOBALS ['USER_ACCOUNT']。因此,其他人稍后需要这个类实例。

1 个答案:

答案 0 :(得分:2)

  

执行此操作时是否存在任何性能或安全问题?

不,但这是一种不好的做法。在全局范围中存储数据可能是设计不良的标志。过多的全局变量是一种“代码味道”,但我并没有从这种特定的用途中得到它。

正如评论中所提到的,它们似乎滥用全局变量而不是implementing the Registry pattern,它旨在准确地允许这种行为而不会污染全局范围

许多其他语言实际上并没有变量的全局范围,这意味着他们 使用Registry(或类似的东西)代替。 PHP恰好可以轻松做错事。

使用注册表而不是全局变量也可以更容易地对代码执行自动化测试。