Просмотр всех файлов .php в папке с одинаковыми именами классов вызывает ошибку redeclare - PullRequest
0 голосов
/ 20 июня 2011

Я делаю основную корзину покупок, и у меня возникла проблема, когда в панели администратора я загружаю все модули в папке. Когда я загружаю каждый файл, PHP использует класс для сбора информации о модулях, такой как Name, Type и т. Д. Но когда он загружает второй файл, он вызывает «Cannot redeclare class 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 голосов
/ 20 июня 2011

Если исходить только из сообщения об ошибке, похоже, что вы определяете класс 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;

    ...
...