Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP$GLOBALS建议_Php_Globals - Fatal编程技术网

PHP$GLOBALS建议

PHP$GLOBALS建议,php,globals,Php,Globals,我注意到Interspire购物车将它的许多类初始化为PHP的$GLOBALS变量。执行此操作时是否存在任何性能或安全问题 下面是一个假的文件,但写的和Interspire购物车的类似 <?php // account.php $GLOBALS['USER_ACCOUNT'] = new USER_ACCOUNT(); $GLOBALS['USER_ACCOUNT']->createPage(); //creating the page ?> 我注意到,在创建页面的

我注意到Interspire购物车将它的许多类初始化为PHP的$GLOBALS变量。执行此操作时是否存在任何性能或安全问题

下面是一个假的文件,但写的和Interspire购物车的类似

<?php 
// account.php

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

?>

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

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

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

正如在评论中提到的,他们似乎滥用了globals而不是,这是为了在不污染全局范围的情况下允许这种行为

许多其他语言实际上没有变量的全局作用域,这意味着它们必须使用注册表(或类似的东西)。PHP恰好使做错事变得容易


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

可能重复:它与上面的代码并不完全重复,但肯定是相关的。从我对上面代码的了解来看,他们将其用作某种注册表?这样做可能是安全的,但这肯定不是最好的方法之一。@Peter,你有什么建议吗?