Redeclare功能错误

时间:2010-10-12 22:49:58

标签: php

我有一个重新申报的问题,我只是想明白为什么有人可以启发我。

这是我的代码。

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");

2 个答案:

答案 0 :(得分: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()函数(但将它们保存在您的包含文件中),这样您就可以调用它而不会导致重新声明。

答案 1 :(得分:0)

你在其他函数中有函数声明,所以每次调用外部函数时,都会重新声明那些内部声明的函数,并且你得到错误。

只需将这些功能移出createAdminPage()函数即可。