Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: php фунуции  (Прочитано 17226 раз)
0 Пользователей и 8 Гостей смотрят эту тему.
timewriter
Гость
« : 17-10-2006 08:13 » 

Ситуация следующая

есть файл функций (global_modules)

есть фенкция А, которая возвращает некое global значение. Если ее вызывать из других файлов, то все нормально работает

Но мне нужно было создать функцию Б, которая должна вызывать функцию А и базируясь на значении из функции А должна возвращать свое значение.

Проблема в том, что Фунция А вызывается нормально, но функция Б, почему-то не получает возвращаемое значение...

Пробовал по тому же логарифму вызывать фунцию А просто (не указывая, что это функция Б) - работает...

Как правельно построить эти функции

function tbl_query($tbl_neme,$tbl_where,$tbl_order,$tbl_limit){
  include 'db.php';
   ...обработка...
  for($i=0;$i<$num;$i++)
  {
    global $arr;
    $arr[$i]=mysql_fetch_array($res);
  }
  mysql_close();
}

function option_out_groups($tbl)
{
   tbl_query('$tbl','1','none','none');
   global $option_res;
             ...обработка...
   $option_res=$option_res.'</select>';
}
« Последнее редактирование: 14-12-2007 23:39 от Алексей1153++ » Записан
Chuda
Гость
« Ответ #1 : 17-10-2006 08:36 » 

во-первых, функция должна возвращать значение и изолировать от остальной программы содержащийся внутри неё код. А в чём смысл функции, которая ничего не возвращает и активно использует глобальные переменные? Так не снижается, А увеличивается вероятность ошибок.
Можно задачу подробнее?
Записан
timewriter
Гость
« Ответ #2 : 17-10-2006 08:46 » 

1-я функция возвращает массив после запроса БД
Если каждый раз писать процедуры запроса - файл засоряется излишками кода, поэтому я написал функцию.

2-я функция на основе значения 1-й функции конфигурирует элемент формы (например, <select>)
Записан
timewriter
Гость
« Ответ #3 : 17-10-2006 08:56 » new

Понял!!!!
Вместо глобальных переменных нужно писать ретарн.

Теперь такой вопрос созрел:
Какая сфера применения глобальных переменных?
Записан
Chuda
Гость
« Ответ #4 : 17-10-2006 13:39 » 

хорошо, что понял)))
а глобальные переменные нужны не так уж часто. Например, хранить в них какие-либо определения.
Реальный пример: на одном хостинге одну базу данных используют несколько сайтов на одном движке. Чтобы имена таблиц не пересекались, в этих именах используется разный префикс. и этот префикс хранится в глобальной переменной.
В сложных проектах лучше по возможности избегать применения глобальных переменных.
OFF: слышала я, что в php6 глобальных переменных не будет!?? :-O На мой взгляд, это перебор.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 17-10-2006 16:05 » 

Chuda, как правило "удалением" глобальных переменных называется перенос их в "стандартное" пространство имен или в "стандартный" класс. Чепуха это все...

timewriter, твой приведенный код ничего не объясняет: в одной ф-ии ты показываешь одну глобальную переменную, а в другой - другую.

Кстати, громоздкую конструкцию
  $num mysql_num_rows();
  for(
$i=0;$i<$num;$i++)
  {
    global 
$arr;
    
$arr[$i]=mysql_fetch_array($res);
  }
лучше заменить на интуитивно понятную
  global $arr;
  
$arr = array();
  while (
$row mysql_fetch_array($res))
    
$arr[] = $row;
И рекомендую вместо mysql_fetch_array() применять mysql_fetch_row() или mysql_fetch_assoc(), либо явно указывать формат возвращаемого массива вторым аргументом. Я один раз уже на этом споткнулся, когда поменялось значение по умолчанию.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chuda
Гость
« Ответ #6 : 18-10-2006 05:03 » 

...Чепуха это все...
так, где там у нас флеймовый раздел? Пойдём, выйдем туда. Расскажу, что нисколько это не чепуха. По крайней мере гораздо проще и понятнее становится, устраняется масса ошибок.
Записан
timewriter
Гость
« Ответ #7 : 18-10-2006 09:05 » 

Спасибо за советы!
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 22-10-2006 08:16 » 

Chuda, в .НЕТ и Яве тоже нет глобальных переменных и ничего. Может РНР зотят целиком под ООП подогнать, а-ля Ява или .НЕТ. Ну а если не будет глобальной переменной, то все переменные, которые придется долго хранить можно затолкать в класс или на худой конец структуру и передавать экземпляр между функциями. Короче жить все равно можно будет Улыбаюсь
Записан

ещё один вопрос ...
Chuda
Гость
« Ответ #9 : 23-10-2006 22:13 » 

жить можно и на ассемблере;)
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 24-10-2006 08:58 » 

Улыбаюсь
Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #11 : 07-11-2006 05:47 » 

Chuda, в .НЕТ и Яве тоже нет глобальных переменных и ничего.
Ну это как посмотреть Улыбаюсь объяви переменную в классе вне всех методов и будет она тебе глобальная в этом классе Ага ИМХО сравнение ПХП и .НЕТ в этом случае неуместно Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 20-11-2006 17:57 » 

Мороз, не надо мешать все в одну кучу Ага. Глобальная переменная в С++, к примеру, видна в любом месте одного файла и если надо, то достаточно напи сать extern, чтобы увидеть ее в другом файле. Т.е. глобальная переменная видна во всем ПРИЛОЖЕНИИ. А то что переменная глобальна в одном классе, ну дык это не серьезно Улыбаюсь. Сколько их в этом приложении удет черт его знает, я не о дочерних классах Ага.
Записан

ещё один вопрос ...
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #13 : 21-11-2006 05:23 » 

Ага
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines