Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проблема с видимостью переменных
 
 автор: victoor   (13.03.2007 в 01:45)   письмо автору
 
 

Есть файлик function.php. в нем есть функция:
function clans()    #Составление массива со всеми характеристиками кланов.
{
      global $clan;
       .........
}

этот файлик подсоединяется к главному файлу через include "../config/function.php";
В главном файле есть код:
function GetNickChempion($PrnStr, $QueryStr, $nick)
   {
     .......
       echo($clan['100']['Адрес_иконки']);  # А здесь не выведет значение :(
       ............            
   };

 GetNickChempion('Дневной чемпионат в Городе Света:','День_Свет', $nick);
 echo($clan['100']['Адрес_иконки']); # Выведет значение


Подключение файла function.php идет в самом начале, как и вызов функции clans();
Почему echo($clan['100']['Адрес_иконки']); в основном файле определено (выводится) а в функции GetNickChempion не выводится?
Ведь объявлено global $clan;

Почему так?

   
 
 автор: Valick   (13.03.2007 в 08:19)   письмо автору
 
   для: victoor   (13.03.2007 в 01:45)
 

Попробуйте передать значение в функцию function GetNickChempion($PrnStr, $QueryStr, $nick, $clan)
Почему так? Не знаю)... При изучении ПХП я сразу отказался от глобальных переменных, ознакомлюсь с ними когда будет свободное время.
И вообще если вы используете чужие коды (с миру по нитке), то глобальные переменные вам может и "помогут", а если пишите сами, то лучше от них отказаться с самого начала.

   
 
 автор: Valick   (13.03.2007 в 08:26)   письмо автору
 
   для: Valick   (13.03.2007 в 08:19)
 

Прочитал, всё пересказывать не буду, но функция GetNickChempion не видит да и не должна видеть вашу глобальную переменную
Попробуйте так:

function GetNickChempion($PrnStr, $QueryStr, $nick) 
   { 
       global $clan;
     ....... 
       echo($clan['100']['Адрес_иконки']);  # А здесь не выведет значение :( 
       ............             
   }; 

 GetNickChempion('Дневной чемпионат в Городе Света:','День_Свет', $nick); 
 echo($clan['100']['Адрес_иконки']); # Выведет значение

   
 
 автор: victoor   (13.03.2007 в 12:32)   письмо автору
 
   для: Valick   (13.03.2007 в 08:26)
 

Спасибо, помогло.

   
 
 автор: victoor   (13.03.2007 в 12:34)   письмо автору
 
   для: victoor   (13.03.2007 в 12:32)
 

А вот еще вопрос:
что выгоднее, с точки зрения быстродействия:
- глобальные переменные
- передача масива через параметр?

P.S. Изменяться данные не будут - будет только считывание из этого массива.

   
 
 автор: victoor   (13.03.2007 в 12:37)   письмо автору
 
   для: Valick   (13.03.2007 в 08:19)
 

function GetNickChempion($PrnStr, $QueryStr, $nick, $clan)
Так работало.
Но, поскольку изменения массива нигде не планируется, а сам массив двумерный и там в общей сложности более 600 записей, я решил, что с точки зрения быстродействия и занятости памяти так будет хуже.

   
 
 автор: Trianon   (13.03.2007 в 12:50)   письмо автору
 
   для: victoor   (13.03.2007 в 12:37)
 

копии параметров, не подвергшихся изменению, фактически не создаются.

   
 
 автор: victoor   (13.03.2007 в 22:34)   письмо автору
 
   для: Trianon   (13.03.2007 в 12:50)
 

спасибо

   
 
 автор: ZuArt   (13.03.2007 в 13:32)   письмо автору
 
   для: victoor   (13.03.2007 в 12:37)
 

если есть опасения о копировании параметров в память и т.п. то можно передавать значение по ссылке...
function GetNickChempion($PrnStr, $QueryStr, $nick, &$clan)
{...}


GetNickChempion($PrnStr, $QueryStr, $nick, &$clan);


Такой способ НИЧУТЬ не уступает глобальным переменным (так же можно обратиться к любому значению, так же можно его изменить, в случае необходимости), НО... есть один существенный плюс - ГАРАНТИРОВАНО работает =)))

Почему заострил на этом внимание, потому что пару раз столкнулся с тем, что скрипт, отлаженный локально с использованием глобальных переменных РЕАЛЬНО НЕ РАБОТАЕТ при выкладывании на хостинг... отладка и несколько отладочных строк кода показывали, что даже после включения в функцию определения global $var; глобальная переменная все равно недоступна... Собственно после этого и отказался от глобальных переменных насовсем =)))

   
 
 автор: victoor   (13.03.2007 в 22:41)   письмо автору
 
   для: ZuArt   (13.03.2007 в 13:32)
 

спасибо

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования