Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальные переменные в функции 
:(
    Опции темы
sidd
Дата 21.12.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 7.10.2006
Где: Киев

Репутация: нет
Всего: нет



Изначально в функции недоступны глобальные переменные. Решить эту проблему можно функцией global, но это не удобно, так как придется объявлять все необходимые мне переменные.
Можно ли как-то сделать, чтоб в функции сразу были доступны для использования все глобальные переменные?
PM MAIL WWW ICQ Skype Jabber   Вверх
flashaa
Дата 21.12.2007, 22:46 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Цитата(sidd @  21.12.2007,  22:41 Найти цитируемый пост)
Можно ли как-то сделать, чтоб в функции сразу были доступны для использования все глобальные переменные?

$globals[''] - берите значение нужной переменной.
Вообще область видимости не зря придумана. Попытка обходить её таким образом говорит о том, что решение наверняка не совсем политкорректное.
PM MAIL   Вверх
sidd
Дата 21.12.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 7.10.2006
Где: Киев

Репутация: нет
Всего: нет



flashaa, благодарю.
PM MAIL WWW ICQ Skype Jabber   Вверх
Mal Hack
Дата 21.12.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Что значит не доступны? Глобальные переменные на то и глобальные, что доступны везде. Другое дело, что изменяя их вы не изменяете их глобально, для этого global нужен.
PM ICQ   Вверх
sidd
Дата 22.12.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 7.10.2006
Где: Киев

Репутация: нет
Всего: нет



Цитата(Mal Hack @ 21.12.2007,  23:39)
Что значит не доступны? Глобальные переменные на то и глобальные, что доступны везде. Другое дело, что изменяя их вы не изменяете их глобально, для этого global нужен.

Ясно. Я неправильно выразился smile
PM MAIL WWW ICQ Skype Jabber   Вверх
vasac
Дата 22.12.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Цитата(Mal Hack @  21.12.2007,  23:39 Найти цитируемый пост)
Глобальные переменные на то и глобальные, что доступны везде. Другое дело, что изменяя их вы не изменяете их глобально, для этого global нужен. 

А для доступа global не нужен?
PM WWW   Вверх
SelenIT
Дата 22.12.2007, 15:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Mal Hack @  21.12.2007,  23:39 Найти цитируемый пост)
Глобальные переменные на то и глобальные, что доступны везде.

Мануал, увы, иного мнения...
Цитата

Код
<?php
$a = 1; /* глобальная область видимости */ 

function Test()

    echo $a; /* ссылка на переменную локальной области видимости */ 


Test();
?>

Этот скрипт не сгенерирует никакого вывода, поскольку выражение echo указывает на локальную версию переменной $a, а в пределах этой области видимости ей не не было присвоено значение. Возможно вы заметили, что это немного отличается от языка C в том, что глобальные переменные в C автоматически доступны функциям, если только они не были перезаписаны локальным определением. Это может вызвать некоторые проблемы, поскольку люди могут нечаянно изменить глобальную переменную. В PHP, если глобальная переменная будет использоваться внутри функции, она должна быть объявлена глобальной внутри нее.

flashaa, про регистр только не забывайте ;)


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Mal Hack
Дата 22.12.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



SelenIT, нету у меня сервака проверить, может быть и проглючил.. Привык, что в Сях - так, как написал я. В ПХП я клобальные вообще не использую...
PM ICQ   Вверх
flashaa
Дата 22.12.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



В PHP у каждой ф-ции СВОЯ область видимости.
Поэтому переменные, объявленные выше, в самой ф-ции недоступны.
Для доступа к ним нужен global, который означает вот что:

Код

global $a;  

$a = &$GLOBALS['a'];  // Аналогично  предыдущей строке


Есть набор суперглобальныз переменных, которые видны отовсюду- $_REQUEST, $_SESSION, $GLOBALS  и тп.

Это сообщение отредактировал(а) flashaa - 22.12.2007, 17:42
PM MAIL   Вверх
madFobos
Дата 27.12.2007, 09:06 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



Если в функции нужно использовать слишком много глобальных переменных, то эта функция не есть правильная, из нее нужно создавать класс и т.п. Как бы сам PHP говорит, что global по сути не лучший способ и его нужно при возможности обходить.
Однако если все же нужно в функции использовать множество глобальных переменных без их объявления, то пожалуйста:
$GLOBALS['var_name']
Еще как вариант, если переменные не изменяются нигде, то можно их обявлять как константы (они тоже имеют суперглобальную область видимости, т.е. везде)

Это сообщение отредактировал(а) madFobos - 27.12.2007, 20:28
PM MAIL   Вверх
FractalizeR
Дата 27.12.2007, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



Цитата(sidd @ 21.12.2007,  22:41)
Изначально в функции недоступны глобальные переменные. Решить эту проблему можно функцией global, но это не удобно, так как придется объявлять все необходимые мне переменные.
Можно ли как-то сделать, чтоб в функции сразу были доступны для использования все глобальные переменные?

Подводя итог беседы smile
Они все доступны через super-global массив $GLOBALS

Это сообщение отредактировал(а) FractalizeR - 27.12.2007, 20:24


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0855 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.