我注意到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']。因此,其他人稍后需要这个类实例。
答案 0 :(得分:2)
执行此操作时是否存在任何性能或安全问题?
不,但这是一种不好的做法。在全局范围中存储数据可能是设计不良的标志。过多的全局变量是一种“代码味道”,但我并没有从这种特定的用途中得到它。
正如评论中所提到的,它们似乎滥用全局变量而不是implementing the Registry pattern,它旨在准确地允许这种行为而不会污染全局范围。
许多其他语言实际上并没有变量的全局范围,这意味着他们 使用Registry(或类似的东西)代替。 PHP恰好可以轻松做错事。
使用注册表而不是全局变量也可以更容易地对代码执行自动化测试。