2010-10-12 26 views
0

我有一個重新聲明的問題,我只是想了解爲什麼有人能夠啓發我。Redeclare函數錯誤

這是我的代碼。

function createAdminPage($dialarg,$topsnamearg,$shortnamearg) { 
    global $dial; 
    $dial = $dialarg; 
    global $topsname; 
    $topsname = $topsnamearg; 
    global $topname; 
    $topname = "Top ".$dial; 
    global $shortname; 
    $shortname = $shortnamearg; 

    function createArrays($i){ 
    global $shortname; 
     $arr = array (
      "name" => "Canción ".$i, 
      "desc" => "Escriba el nombre de la canción ".$i, 
      "autor" => "Autor ".$i, 
      "desc_autor" => "Escriba el Nombre del Autor ".$i, 
      "id" => $shortname."cancicon_".$i, 
      "va_autor" => $shortname."autor_".$i, 
      "type" => "text", 
      "std" => ""); 
     return $arr; 
    } 

    global $options; 
    $options = array (
     array("name" => "Top ".$dial, "type" => "title"), 
     array("type" => "open"), 
     createArrays(1), 
     createArrays(2), 
     createArrays(3), 
     createArrays(4), 
     createArrays(5), 
     createArrays(6), 
     createArrays(7), 
     createArrays(8), 
     createArrays(9), 
     createArrays(10), 
     array("type" => "close") 
    ); 
    function cl_add_admin() {   
     global $topname, $shortname, $options, $dial;   
     if ($_GET['page'] == basename(__FILE__)) {     
      if ('save' == $_REQUEST['action']) {      
       foreach ($options as $value) { 
        update_option($value['id'], $_REQUEST[ $value['id'] ]); 
        update_option($value['va_autor'], $_REQUEST[ $value['va_autor'] ]); 

        foreach ($options as $value) { 
         if(isset($_REQUEST[ $value['id'] ])) { update_option($value['id'], $_REQUEST[ $value['id'] ] ); } else { delete_option($value['id']); } 
         if(isset($_REQUEST[ $value['va_autor'] ])) { update_option($value['va_autor'], $_REQUEST[ $value['va_autor'] ] ); } else { delete_option($value['va_autor']); } 

        } 

        header("Location: themes.php?page=functions.php&saved=true"); 
        die;       
       } 
      } else if ('reset' == $_REQUEST['action']) {       
       foreach ($options as $value) { 
        delete_option($value['id']); 
        delete_option($value['va_autor']); 
       } 

       header("Location: themes.php?page=functions.php&reset=true"); 
       die; 
      } 
     } 

     add_menu_page($topname, 'Tops Circuito Lider', 'edit_themes', $dial.'-handle', 'cl_admin'); 
     add_submenu_page($dial.'-handle', $topname, $topname, 'edit_themes', $dial.'sub-handle', 'cl_admin'); 

    } 
    function cl_add_init() { 
     $file_dir=get_bloginfo('template_directory'); 
     wp_enqueue_style("functions", $file_dir."/functions/options_panel.css", false, "1.0", "all"); 
    } 

    function cl_admin() {  
     global $topname, $shortname, $options; 

     //echo $topname; 
     //print_r($options); 

     if ($_REQUEST['saved']) echo '<div id="message" class="updated fade"><p><strong>'.$topname.' settings saved.</strong></p></div>'; 
     if ($_REQUEST['reset']) echo '<div id="message" class="updated fade"><p><strong>'.$topname.' settings reset.</strong></p></div>'; 

     ?> 
      <div class="wrap"> 
      <h2>Configurar <?php echo $topname; ?></h2> 

      <form method="post"> 

      <?php  

     foreach ($options as $value) { 
      switch ($value['type']) { 

      case "open": 
      ?> 
       <table width="100%" border="0" style="background-color:#cdcdcd; padding:10px;"> 

      <?php break; 

      case "close": 
      ?> 

       </table><br /> 

      <?php break; 

      case "title": 
      ?> 
       <table width="100%" border="0" style="background-color:#868686; padding:5px 10px;"><tr> 
       <td colspan="2"><h3 style="font-family:Georgia,'Times New Roman',Times,serif;"><?php echo $value['name']; ?></h3></td> 
       </tr> 

      <?php break; 

      case 'text': 
      //echo "begins"; 
      ?> 
       <tr> 
       <td width="20%" rowspan="2" valign="middle"> 
        <strong><?php echo $value['name']; ?></strong> 
        <br /> 
        <strong><?php echo $value['autor']; ?></strong> 
       </td> 
       <td width="80%"> 
        <input style="width:400px;" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php  if (get_settings($value['id']) != "") { echo get_settings($value['id']); } else { echo $value['std']; } ?>" /><br /> 
        <small><?php echo $value['desc']; ?></small> 
        <br /> 
        <input style="width:400px;" name="<?php echo $value['va_autor']?>" id="<?php echo $value['va_autor']?>" type="<?php echo $value['type']; ?>" value="<?php  if (get_settings($value['va_autor']) != "") { echo get_settings($value['va_autor']); } else { echo $value['std']; } ?>" /><br /> 
        <small><?php echo $value['desc_autor']; ?></small> 
       </td> 
       </tr> 

       <tr><td colspan="2" style="margin-bottom:5px;border-bottom:1px dotted #000000;">&nbsp;</td></tr><tr><td colspan="2">&nbsp;</td></tr> 

       <?php 

       break; 
      } 
     //echo "after break"; 
     } 
    ?> 
     <style type="text/css" /> 
     .submit { 
     display:inline; 
     width:200px; 
     } 
     </style> 
     <p class="submit"> 
     <input name="save" type="submit" value="Guardar" /> 
     <input type="hidden" name="action" value="save" /> 
     </p> 
     <p class="submit"> 
     <input name="reset" type="submit" value="Borrar todos" /> 
     <input type="hidden" name="action" value="reset" /> 
     </p> 
     </form> 
     </div> 
    <?php 
    } 
    add_action('admin_menu', 'cl_add_admin'); 
    add_action('admin_init', 'cl_add_init'); 
} 

這就是我如何從另一個文件

include("includes/_createTop.php"); 
createAdminPage("923","Lider 92.3 FM","cl_923"); 
createAdminPage("931","Romance 93.1 FM","cl_931"); 

回答

1

你打電話createAdminPage()兩次調用它:

createAdminPage("923","Lider 92.3 FM","cl_923"); 
createAdminPage("931","Romance 93.1 FM","cl_931"); 

,使內部的功能再次聲明,因爲這是每次調用該函數時實際運行的內容:

function createAdminPage($dialarg,$topsnamearg,$shortnamearg) { 
    function createArrays($i){ 
    ... 
    function cl_add_admin() { 
    ... 
    function cl_add_init() { 
    ... 
    function cl_admin() { 
} 

因此,重新聲明錯誤。

您應該將文件移出createAdminPage()函數(但請將它們放在包含文件中),以便在不導致重新聲明的情況下調用它。

+0

事情是我想再次使用它們:S但具有不同的值,爲什麼參數是不同的,如果我把它從函數createAdminPage中拿出來,我將無法重用具有不同值的代碼:( – 2010-10-13 00:57:48

+0

只是爲了澄清,因爲我需要使用代碼3次,但具有不同的變量值,如果我把它從函數中取出幷包含它3次,我會得到相同的錯誤,這就是我想要重用的錯誤代碼:)對不起 – 2010-10-13 01:06:23

+0

有沒有辦法'include_once()'而不是'include()'? – BoltClock 2010-10-13 07:43:18

0

在其他函數中有函數聲明,所以每次調用外部函數時,都會重新聲明這些內部聲明的函數,並且會得到錯誤。

只需將這些函數移出createAdminPage()函數即可。

+0

事情是,我想再次使用它們:S但具有不同的值,爲什麼參數不同,如果我把它從函數createAdminPage ho我不能重用具有不同值的代碼:( – 2010-10-13 00:58:08

+0

只是爲了澄清,因爲我需要使用代碼3次,但具有不同的變量值,如果我把它從函數中取出幷包含它3次,我會得到相同的錯誤,這就是我想要重用的代碼。:)對不起 – 2010-10-13 01:05:48