Автор Тема: Почему global не работает  (Прочитано 7849 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ManInBlack

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Почему global не работает
« : 26 Июля 2005, 00:29:05 »
Почему global не работает и как этого избежать (пользоваться переменными), если совершаются такие действия:

+-внешний (главный) файл подключает (include) скрипт модуля (module.php)
-->(module.php)--+-скрипт модуля подключает(include) свой файл функций (func.php)
-->(module.php)->(func.php)--+- из функций в func.php нельзя достать переменные (не все, что странно!)

Как сделать это возможным?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Почему global не работает
« Ответ #1 : 26 Июля 2005, 13:47:11 »
global работает всегда

Оффлайн Antonio

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Почему global не работает
« Ответ #2 : 22 Августа 2005, 17:10:36 »
Цитировать
Почему global не работает и как этого избежать (пользоваться переменными), если совершаются такие действия:

+-внешний (главный) файл подключает (include) скрипт модуля (module.php)
-->(module.php)--+-скрипт модуля подключает(include) свой файл функций (func.php)
-->(module.php)->(func.php)--+- из функций в func.php нельзя достать переменные (не все, что странно!)

Как сделать это возможным?


У меня возникла точно такая же херня.
Как бы все таки пофиксить?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Почему global не работает
« Ответ #3 : 23 Августа 2005, 04:43:02 »
способ пофиксить существует в природе только один:
почитать документацию, и написать свой скрипт в соответствии с ней.
или, на крайний случай, задать на форуме КОНКРЕТНЫЙ вопрос.

Оффлайн Antonio

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Почему global не работает
« Ответ #4 : 23 Августа 2005, 13:46:05 »
Хорошо конкретный вопрос:


<?
function 
func1(){
  
#global $a;
  
$a "test";
  function 
func2(){
    global 
$a;
    echo 
"##$a##";
  }
  
func2();
}
func1();
?>


При выполнении этот скрипт выдаст ####
Если раскоментировать первый global, то все работает.

Вопрос: Есть ли возможность заставить работать скрипт не используя global в func1?

В документации ничего вразумительного по данному вопросу не нашел. Может плохо искал конечно.

Оффлайн Демет

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 29
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Почему global не работает
« Ответ #5 : 23 Августа 2005, 14:17:10 »
Цитировать
Вопрос: Есть ли возможность заставить работать скрипт не используя global в func1?

Например передачей параметра

function func1(){    
    function 
func2($str){
       echo 
"##$str##";
    }
   
func2("test");
}   

func1(); 

Оффлайн Antonio

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Почему global не работает
« Ответ #6 : 23 Августа 2005, 15:56:54 »
Передача параметром тоже не подходит.

Я привел упрощенную схему.

На самом деле таких переменных там много. Причем все они разбросаны по разным модулям. И вложенность функций более сложная. Прописывать их в global, а тем более передавать параметром сильно не желательно.

Еще вопрос: где можно почитать про область видимости переменных во вложенных функциях.

Оффлайн Демет

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 29
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Почему global не работает
« Ответ #7 : 23 Августа 2005, 17:16:42 »
Цитировать
На самом деле таких переменных там много.

может уж тогда на крайняк сделать из них массив.
Цитировать
Причем все они разбросаны по разным модулям.

имхо вот это не очень хорошо.
Цитировать
И вложенность функций более сложная.

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

Оффлайн Antonio

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Почему global не работает
« Ответ #8 : 24 Августа 2005, 11:17:07 »
Цитировать

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


Есть две разработки, которые я пытаюсь скрестить.
В базовой разработке, модули вызываются только при помощи функций.

Как ни хотелось, но видимо прийдется вносить изменения в базовую разработку.

Оффлайн unclebob

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 96
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Почему global не работает
« Ответ #9 : 02 Сентября 2005, 14:07:37 »
а у меня в ПХП 4.3.6 все работает правильно без использования global в func1...


<?
$a=111;
function 
f1(){
         function 
f2(){
                  global 
$a;
                  echo \
'a=\'.$a;
                  }
         f2();
         }

f1();
?>

Выводит "a=111"
запивайте пиво водкой, чтобы жизнь была короткой
запивайте водку пивом, чтобы стать большим красивым

Оффлайн Antonio

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Почему global не работает
« Ответ #10 : 14 Сентября 2005, 11:48:48 »
В таком случае все работает.

Но был интересен случай, когда $a определялась именно в f1().

Хотя в принципе, это уже чисто академический интерес.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28