Forum Webscript.Ru

Программирование => PHP => Тема начата: ManInBlack от 26 Июля 2005, 00:29:05

Название: Почему global не работает
Отправлено: ManInBlack от 26 Июля 2005, 00:29:05
Почему global не работает и как этого избежать (пользоваться переменными), если совершаются такие действия:

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

Как сделать это возможным?
Название: Почему global не работает
Отправлено: Меняздесьдавнонет от 26 Июля 2005, 13:47:11
global работает всегда
Название: Почему global не работает
Отправлено: Antonio от 22 Августа 2005, 17:10:36
Цитировать
Почему global не работает и как этого избежать (пользоваться переменными), если совершаются такие действия:

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

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


У меня возникла точно такая же херня.
Как бы все таки пофиксить?
Название: Почему global не работает
Отправлено: Меняздесьдавнонет от 23 Августа 2005, 04:43:02
способ пофиксить существует в природе только один:
почитать документацию, и написать свой скрипт в соответствии с ней.
или, на крайний случай, задать на форуме КОНКРЕТНЫЙ вопрос.
Название: Почему global не работает
Отправлено: Antonio от 23 Августа 2005, 13:46:05
Хорошо конкретный вопрос:


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


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

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

В документации ничего вразумительного по данному вопросу не нашел. Может плохо искал конечно.
Название: Почему global не работает
Отправлено: Демет от 23 Августа 2005, 14:17:10
Цитировать
Вопрос: Есть ли возможность заставить работать скрипт не используя global в func1?

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

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

func1();
Название: Почему global не работает
Отправлено: Antonio от 23 Августа 2005, 15:56:54
Передача параметром тоже не подходит.

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

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

Еще вопрос: где можно почитать про область видимости переменных во вложенных функциях.
Название: Почему global не работает
Отправлено: Демет от 23 Августа 2005, 17:16:42
Цитировать
На самом деле таких переменных там много.

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

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

если не секрет а к чему такая вложенность ф-ций. например в том примере что ты приводишь, вложенность вовсе не нужна. я конечно понимаю что пример упрощенный, но все же...
Название: Почему global не работает
Отправлено: Antonio от 24 Августа 2005, 11:17:07
Цитировать

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


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

Как ни хотелось, но видимо прийдется вносить изменения в базовую разработку.
Название: Почему global не работает
Отправлено: unclebob от 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"
Название: Почему global не работает
Отправлено: Antonio от 14 Сентября 2005, 11:48:48
В таком случае все работает.

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

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