0

我注意到 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']。因此,以后其他人将需要这个类实例。

4

1 回答 1

2

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

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

正如评论中提到的,他们似乎在滥用全局变量而不是实现注册表模式,该模式旨在允许这种类型的行为而不会污染全局范围

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

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

于 2011-03-23T17:18:51.113 回答