php无法重新声明类/未定义的变量Joomla Module


php Cannot redeclare class / Undefined variable Joomla Module

我还在尝试OOP,我对它很陌生,所以,我已经为joomla2.5.x创建了一个模块,在它的主php文件I require_once中,有一个类如下:

require_once(JPATH_SITE.'/modules/'.$module_dir.'/libs/classes.php');

classes.php包含以下内容:

class experiment
{
    function clean($input)
    {
        return filter_var($input, FILTER_SANITIZE_STRING);
    }
}
$my = new experiment;

然后在模块php文件中,我像这样使用它:

$name = $my->clean($params->get('name'));

在这之前,一切都很正常。但只有当模块在同一页面上只出现一次时,才会出现这种情况。如果我复制模块并在同一页上使用两次,我会得到错误Undefined variable my。如果我将require_once更改为require,则会得到错误Cannot redeclare class experiment。奇怪的

我也试过if (!class_exists(..if(!isset($my)) { .. },但我知道它不会起作用。

我将感谢任何帮助,干杯。

当您包含一个文件时,该文件中定义的任何类都是全局可用的,但任何变量都与include在同一范围内——在这种情况下,只是在您最初包含文件的函数内。

因此,当您使用require_once()时,您会看到第二次尝试包含它时,什么都没有发生——这是正常的,因为文件已经包含在内,但$my变量也没有定义——因为当函数第一次结束时,它超出了范围。

当您切换到require()时,会得到不同的错误,因为您正在重新定义类。


这里的解决方案是在定义类时而不是设置全局变量。定义类,然后在需要使用它时,创建该类的实例。不要依赖全局变量。

如果您试图只创建类的一个实例(您真的需要这样做吗?),请考虑使用singleton模式。