函数外不存在变量?

时间:2010-11-18 20:49:31

标签: php wordpress variables

你将会看到Wordpress Widget代码(从Akismet获取一点修改)。

问题是$ title;变量只在一个函数和全局变量等中工作正常。这似乎没有帮助。

怎么了?

 function myWidget_control() {
        $options = $newoptions = get_option('myWidget');

        if ( isset( $_POST['myWidget-submit'] ) && $_POST["myWidget-submit"] ) {
            $newoptions['title'] = strip_tags(stripslashes($_POST["myWidget-title"]));
            if ( empty($newoptions['title']) ) $newoptions['title'] = __('Spam Blocked');
        }

        if ( $options != $newoptions ) {
            $options = $newoptions;
            update_option('myWidget', $options);
        }

        $title = htmlspecialchars($options['title'], ENT_QUOTES); ?>

                <p><label for="myWidget-title"><?php _e('Title:');  ?><input style="width: 250px;" id="myWidget-title" name="myWidget-title" type="text" value="<?php echo $title; ?>" /></label></p>
                <input type="hidden" id="myWidget-submit" name="myWidget-submit" value="1" />

<?php 
}
function myWidget()
{

   echo $title; /* shows nothing but works perfectly 8 lines above! */
   echo $options['title']; /* shows nothing once again */
}

3 个答案:

答案 0 :(得分:1)

$ title在myWidget_control()函数的范围内定义,因此仅在那里可用。

如果你需要它在myWidget()中可用,它也必须在那里创建/检索,我建议再次调用get_option('myWidget')来检索它。

function myWidget() {
   $options = get_option('myWidget');
   $title = htmlspecialchars($options['title'], ENT_QUOTES);

   echo $title;
}

答案 1 :(得分:0)

这些变量是在函数本身内定义的,因此除非您告诉他们,否则无法在这些函数之外访问这些变量。试试看他们......

function myWidget_control() {
     global $title, $options;
     [yourcode]
}
function myWidget() {
     global $title, $options;

   echo $title;
   echo $options['title'];

}

您可能不需要在两个函数中对它们进行全局化,但我认为您可以这样做。

答案 2 :(得分:0)

范围仅限于定义变量的位置;在这种情况下是myWidget_control()方法。见PHP.NET: variable scope