opencart中的php全局变量

时间:2014-08-27 06:03:40

标签: php opencart

我正在尝试通过学习opencart源代码来学习使用php进行实际应用,而我却陷入困境

// Register Globals
if (ini_get('register_globals')) {
ini_set('session.use_cookies', 'On');
ini_set('session.use_trans_sid', 'Off');

session_set_cookie_params(0, '/');
session_start();

$globals = array($_REQUEST, $_SESSION, $_SERVER, $_FILES);

foreach ($globals as $global) {
    foreach(array_keys($global) as $key) {
        unset(${$key}); 
    }
} 
}
  1. 我的理解是我们正在尝试取消设置所有会话变量,但如果之前没有启动会话,为什么我们需要取消设置呢?
  2. unset($ {$ key})究竟做了什么?

  3. 为什么opencart使用myisam引擎?

2 个答案:

答案 0 :(得分:1)

1)它清除变量,其中$_SESSION$_REQUEST$_SERVER$_FILES个变量中的键(如果它们为空),而不是该变量的内循环迭代将被跳过(无需检查它是否已设置,因为它将始终默认设置) 例如。如果设置了变量$foo并设置了$_SESSION['foo'],则会设置$foo,而不是$_SESSION['foo']

2)它是变量变量。如果$key = 'foo',则unset(${$key})将取消$foo变量。

3)向opencart开发人员询问原因。

答案 1 :(得分:0)

Justinas是正确的,您正在查看的代码部分基本上删除了许多全局变量,以迫使OpenCart开发人员使用可用的内部方法($ this-> request-> server []和$ this->会话例如)。 OC开发人员已经这样做,以便他们可以确保在整个商店代码中始终如一地处理数据。

我相信myisam的选择是为了向后兼容。当开发OC 1.x时,innodb并没有像现在这样受到广泛支持。他们目前正在研究OC 2,我认为可以做出选择。有很多代码块可以改变数据库格式并为性能应用额外的索引。

OpenCart实际上是一个非常好的平台,可以让你在MVC校长中崭露头角,但是当你提到你正在学习PHP时,我也会对一些通用的PHP代码进行搜索。根据你做的事情,MVC可能会有点矫枉过正。