Нужна помощь Доступ к PHP-переменной: Область действия и глобальные переменные - PullRequest
0 голосов
/ 19 ноября 2011

Я изучаю PHP, и мне нужна помощь по проблеме глобальной переменной / области видимости. Мне нужно получить доступ к значению $myvars во внешней функции:

function outer() {
   function inner($atts) {
       $myvars = $atts['mydata'];
   }
   // I need to access the value of $myvars in here:
   $jsonized = json_encode($myvars);
}

function set_atts_func($atts) {
    inner($atts);
}

add_shortcode("my_short_code", "set_atts_func");

Я максимально упростил задачу. Это часть плагина WordPress. Я попытался сделать $myvars global следующим образом:

function inner($atts) {
    global $myvars;
    $myvars = $atts['mydata'];
}

Но я не понял этого. Есть предложения?


Дополнительная информация:

Если у кого-то есть лучший способ решения моей проблемы, чем использование вложенных функций, я бы хотел это услышать.

Это для плагина WordPress для моего сайта. Короче говоря, мне нужно передать $atts в сценарий JavaScript.

Long Story: add_shortcode() линия вызывает set_att_func() и дает мне доступ к $atts. Чтобы передать $atts в js, я буду использовать функцию WordPress 'wp_localize_script().

Но эту функцию можно вызывать только в том случае, если параметр сценария, на который ссылается вызов wp_localize_script(), был поставлен в очередь в wp_enqueue_script() - по крайней мере, насколько я могу судить. Я безуспешно пытался перевести wp_localize_script() и wp_enqueue_script() на * 1030. Итак, я пытаюсь получить $atts в outer(), где находятся вызовы wp_localize_script() и wp_enqueue_script().

Если есть более простой и легкий способ доступа к $atts в outer(), дайте мне знать.

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

В основном я работал над объектно-ориентированным подходом, и в этом случае переменная, которую вы хотите определить как глобальная, должна быть объявлена ​​поверх определений функций, подобных этому.

> var $x;  
function myfunc($x)  
{  
$this->x = 'dd';    
}  

и когда вы создадите экземпляр класса, вы можете просто вызвать эту переменную x после функции myfunc (), и ее значение будет равно dd.может у тебя будет идея.

0 голосов
/ 19 ноября 2011

Чтобы сделать переменную глобальной, определите ее на самом высоком уровне (класс или иерархия), с которого вы хотите, чтобы она была доступна, и затем обязательно используйте ключевое слово global при определении ее в любой другой функции.Пример:

$myvas = '';
function inner($atts) {
   global $myvars;
   $myvars = $atts['mydata'];
   set_atts_func('pass argument');
}

function set_atts_func($avar) {
   global $myvars;
   // ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...