查看具有相同类名的文件夹中的所有.php文件会给我重新声明错误

时间:2011-06-20 05:34:10

标签: php class include redeclare

我正在制作一个基本的购物车,我遇到了一个问题,在管理面板中,我正在加载文件夹中的所有模块。当我加载每个文件时,PHP使用一个类来收集模块信息,如Name,Type等。但是当它加载第二个文件时,它会显示“无法重新声明类module_info in ...”

所以我想知道,我怎样才能加载所有模块及其信息(通过所有模块使用的module_info类)并且不显示这个'redeclare'错误。

我尝试了'include_once'和'require_once'等,甚至没有设置,但没有运气。

 //module - payment
$modulePAYMENT = "<table class='table_result' cellpadding=\"0\" cellspacing=\"0\">";
$handler = opendir("../includes/modules/payment/");
while ($file = readdir($handler)) {
    if ($file != "." && $file != "..") {
        if($num == 1) {
            $cla = "hvr";
            $num = 0;
        } else {
            $cla = "blu";
            $num = 1;
        }
    //Load Modules Info
    include_once("../includes/modules/payment/".$file);
    $module_info = new module_info;

    //Get Links
    if(moduleInstalled($module_info->MODULE_code)) {
        $query_MOD = "SELECT * FROM sh_module WHERE code = '".$module_info->MODULE_code."'";
        $exe_MOD = mysql_query($query_MOD);
        $row = mysql_fetch_array($exe_MOD);
        if($row['status']==1) {
            $status = "<a class='link_status_enable pointer' onclick='moduleChangeStatus(".$row['mid'].",0)' title='This module is ENABLED. Click to DISABLE it.'>Enabled</a>";
        } else {
            $status = "<a class='link_status_disable pointer' onclick='moduleChangeStatus(".$row['mid'].",1)' title='This module is DISABLED. Click to ENABLE it.'>Disabled</a>";
        }
        $module_links = "<a class='link_small_lblue' href='sidebox_edit.php?SideboxID=".$row['sid']."'>Settings</a> <a class='link_small_lblue pointer' onclick='deleteModule(".$row['mid'].")'>Uninstall</a><div class='spacer10'></div>".$status;
    } else {
        $module_links = "<a class='link_small_lblue pointer' onclick=\"installModule('".urlencode($file)."')\">Install Module</a>";
    }

    //Add to list
    $modulePAYMENT .= "<tr class='{$cla}' id='page_".$row['pid']."'><td><div style='float:left;padding:0;margin:0;' class='text_medium_white'>".$module_info->MODULE_title."<br>{$module_links}</div><div style='float:right;padding:0;margin:0;text-align:right;'></div></td></tr>";
    }

1 个答案:

答案 0 :(得分:0)

单独查看错误消息,您似乎在每个包含中定义类module_info。它应该被定义一次,并包含在每个模块文件中,为每个模块文件创建一个新实例。即使新包含的模块信息将覆盖之前的模块信息,如果您需要稍后引用它,也可以将其添加到数组中:

    ...

    $modules_info = array();

    while ($file = readdir($handler)) {
    if ($file != "." && $file != "..") {
        if($num == 1) {
            $cla = "hvr";
            $num = 0;
        } else {
            $cla = "blu";
            $num = 1;
        }

    //Load Modules Info
    include_once("../includes/modules/payment/".$file);

    $modules_info[basename($file)] = $module_info;

    ...