php почему сбой basic super global?

#php #global-variables

#php #глобальные переменные

Вопрос:

я использую глобальные переменные для обмена переменными между такими функциями

 <?php
$whatyear;
$whatfirstname;
$whatlastname;
function mycustom_user_register_submit($form, amp;$form_state)
{
            $GLOBALS["whatyear"]=$form_state['values']['yearofstudy'];
            $GLOBALS["whatfirstname"]=$form_state['values']['firstname'];
            $GLOBALS["whatlastname"]=$form_state['values']['lastname'];
}
function course_registration_user_insert(amp;$edit, $account, $category)
{
            $newuserid=$account->uid;
            $yearofstudy=$GLOBALS["whatyear"];
            $fname=$GLOBALS["whatfirstname"];
            $lname=$GLOBALS["whatlastname"];
                        //now use vars
                        drupal_set_message('dear '.$fname.' '.$lname.' ,'.'account uid is '.$account->uid); 
}
  

Но переменные

fname,lname,yearofstudy

они шокирующе пусты! пожалуйста, помогите мне понять, почему. я получаю такие ошибки, как

 Notice: Undefined index: whatyear in course_registration_user_insert() (line 110 of C:wampwwwdrupal-7.1sitesallmodulescourse_registrationcourse_registration.module).
  

Комментарии:

1. Пожалуйста, добавьте больше деталей. Переменные, которые вы называете пустыми, не отображаются в вашем коде выше. Также невозможно сказать, что происходит, не зная $form_state , содержит ли что-нибудь на самом деле

2. Должны ли мы предполагать, что вы на самом деле вызываете mycustom_user_register_submit() функцию перед вызовом course_registration_user_insert() функции?

3. @Pekka — Смотрите предпоследнюю строку, начинающуюся с drupal_set_message( .

4. @Pekka: переменные отображаются в функции drupal_set_message(). Кроме того, удаление второй функции и добавление ее в первую функцию заставляет вещи работать drupal_set_message(‘ваши переменные ‘.$GLOBALS[«whatyear»].»….».$ ГЛОБАЛЬНЫЕ переменные[«какое первое имя»].» ….. «.$ Глобальные переменные[«какое последнее имя»]);

5. полный код на pastebin.com/Rt8SPaVz

Ответ №1:

Попробуйте использовать глобальные переменные, подобные этому:

 <?php
function mycustom_user_register_submit($form, amp;$form_state)
{
    global $whatyear;
    global $whatfirstname;
    global $whatlastname;
    $whatyear=$form_state['values']['yearofstudy'];
    $whatfirstname=$form_state['values']['firstname'];
    $whatlastname=$form_state['values']['lastname'];
}
function course_registration_user_insert(amp;$edit, $account, $category)
{
    global $whatyear;
    global $whatfirstname;
    global $whatlastname;
    $newuserid=$account->uid;
    $yearofstudy=$whatyear;
    $fname=$whatfirstname;
    $lname=$whatlastname;
    //now use vars
    drupal_set_message('dear '.$fname.' '.$lname.' ,'.'account uid is '.$account->uid); 
}
?>
  

Если это не сработает, убедитесь, что эти функции вызываются в одном экземпляре php в правильном порядке. Если первый вызывается на одной странице, а затем insert вызывается на другой странице, будет открыта новая копия php, и вы потеряете свои переменные среды.

Комментарии:

1. Не должно иметь никакого значения. Использование $GLOBALS должно работать нормально

2. Есть ли какой-либо способ показать, где вызываются функции?

3. @ xthexder: я использую drupal drupal.org . Пока мои функции называются определенным образом, drupal вызывает их для меня. В этом случае my fns — это хуки, вызываемые drupal. Но вопрос был о php, а не о drupal