我注意到Interspire Shopping Cart将很多类初始化为PHP的$GLOBALS变量。执行此操作时是否存在任何性能或安全问题?
下面是一个假文件,但写的类似于Interspire购物车的文件。
<?php
// account.php
$GLOBALS['USER_ACCOUNT'] = new USER_ACCOUNT();
$GLOBALS['USER_ACCOUNT']->createPage(); //creating the page
?>我注意到,在创建页面的过程中(见上),包含的其他文件将需要访问$GLOBALS‘’USER_ACCOUNT‘。所以这个类实例以后会被其他人所需要。
发布于 2011-03-24 01:18:51
执行此操作时是否存在任何性能或安全问题?
不,但这是一种糟糕的做法。在全局作用域中存储数据可能是糟糕设计的标志。过多的全局参数是一种“代码气味”,但我并没有从这种特定的用法中得到它。
正如评论中提到的,他们似乎滥用了全局变量,而不是implementing the Registry pattern,后者旨在允许这种类型的行为,而不会污染全局范围。
许多其他语言实际上没有变量的全局作用域,这意味着它们必须使用Registry (或类似的东西)。PHP只是碰巧让做错误的事情变得容易。
使用注册表而不是全局变量也可以更容易地对代码执行自动化测试。
https://stackoverflow.com/questions/5407015
复制相似问题