#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