Переменная не существует вне функции? - PullRequest
1 голос
/ 18 ноября 2010

вы увидите код 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 ]

1 голос
/ 18 ноября 2010

$ title определено в рамках функции myWidget_control (), поэтому доступно только там.

Если вам нужно, чтобы оно было доступно в myWidget (), его тоже нужно создавать / извлекать, япредложил бы снова вызвать get_option ('myWidget'), чтобы получить его.

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

   echo $title;
}
0 голосов
/ 18 ноября 2010

Область действия ограничена тем, где определена переменная;в этом случае метод myWidget_control().См. PHP.NET: переменная область действия

0 голосов
/ 18 ноября 2010

Эти переменные определены внутри самой функции и, следовательно, не могут быть доступны вне этих функций, если вы не сообщите им об этом. Дайте им возможность попробовать ...

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

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

}

Возможно, вам не нужно глобализировать их в обеих функциях, но я думаю, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...