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

时间:2013-07-13 23:56:15

标签: php class oop joomla joomla-module

我正在尝试使用OOP,我对此非常陌生,所以, 我为joomla 2.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)) { .. },但我知道它不起作用。

我会感激任何帮助,欢呼。

1 个答案:

答案 0 :(得分:1)

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

因此,当您使用require_once()时,您会看到第二次尝试包含它时,没有任何反应 - 这是正常的,因为文件已经包含在内,但是{{ 1}}变量也没有定义 - 因为它在第一次结束时超出了范围。

当您切换到$my时,会出现其他错误,因为您正在重新定义该类。


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

如果您只想创建一个类的实例(您真的需要这样做吗?),请考虑使用singleton pattern代替。