В функции не видно массива созданного до ее???

Astral Man

We Will Rock You
В функции не видно массива созданного до ее???

Привет!

Заполняю массив, делаю print_r() все ок, все видно.
Создаю функцию которая этот массив должна распечатать, в нутри объявляю массив глобальным, почему-то он становится пустым. В чем проблема?
 

Кром

Новичок
Проблемы нет. Массив в глобальной области будет виден внутри функции.
 

Astral Man

We Will Rock You
Автор оригинала: Кром
Проблемы нет. Массив в глобальной области будет виден внутри функции.
PHP:
$_AAA['1'] = 111;
function aaa() {
    global $_AAA;
    foreach ($_AAA as $key => $val) {
        echo $val;   
    }
}
aaa();
Не хочет :-(
 

Astral Man

We Will Rock You
IntenT
4.3.8
у меня не работает...
Warning: Invalid argument supplied for foreach() in.....
 

Сергей123

Новичок
Astral Man
прямо с твоего сообщения я делаю copy/paste, запускаю на 4.3.8 - появляется 111.
Сделай так же...

-~{}~ 02.09.04 16:55:

А вот если заменить в
foreach ($_AAA
хоть одну букву A на русскую - тогда твой warning.
 

Astral Man

We Will Rock You
Бресь Сергей
Создал новый файл - работает. В модуле не работает...
ни чего не понимаю...

-~{}~ 02.09.04 18:02:

Бресь Сергей
Че такое ????
 

Сергей123

Новичок
Astral Man
Чё чё?!
смотришь, что у тебя стоит после открывающей скобки в foreach'е (на который ругается),
внимательно глазами идёшь по коду "назад", до первого места, где встречается эта же переменная...

Дальше рассказывать?
 

Кром

Новичок
>хоть одну букву A на русскую - тогда твой warning.

Не только поэтому. Также возможно он где то переопределяет массив в переменную. В любом случае, global в такой функции - плохой тон.
 

Сергей123

Новичок
Кром
да нет, это я так...
Думал (наивный), что он руками перебирал РЕАЛЬНЫЙ свой скрипт.
 

Astral Man

We Will Rock You
Кром
Я знаю что global вообще лучше не использовать, но приходится, слишком уж сложная структура таблиц и куча массивов которые надо вывести на печать.

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

Может это быть из-зи вложенных функций, это где-то третье вложение.
 

Фанат

oncle terrible
Команда форума
Astral Man
Пора бы узнать такую вещь, что кроме проблем, в которых тебе виноват нехороший язык, бывают еще и опечатки, сделанные собственными [...] руками.

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

Astral Man

We Will Rock You
Фанат
Ну и где опечатка?
то что сказал Бресь Сергей это все ерунда.

Говорю:
Может это быть из-зи вложенных функций?

PHP:
function test() {

    $_AAA['1'] = "ААА";
    function aaa() {
        global $_AAA;
        foreach ($_AAA as $key => $val) {
            echo $val;   
        }
    }
    aaa();
}
test();
Так не работает.

PHP:
$_AAA['1'] = "ААА";
    function aaa() {
        global $_AAA;
        foreach ($_AAA as $key => $val) {
            echo $val;   
        }
    }
    aaa();
А так работает.
 

:::Nil:::

Guest
Попробуй так...

PHP:
function test() { 

    $_AAA['1'] = "ААА"; 
    function aaa($_A) { 
        foreach ($_A as $key => $val) { 
            echo $val;    
        } 
    } 
    aaa($_AAA); 
} 
test();
 

Кром

Новичок
Astral Man
Естественно так работать не будет. Ты же используя директиву global берешь массив из глобальной области видимости. А внутри функции область локальная. Учи основы.
 

Astral Man

We Will Rock You
Автор оригинала: Кром
Astral Man
Естественно так работать не будет. Ты же используя директиву global берешь массив из глобальной области видимости. А внутри функции область локальная. Учи основы.
Да, ступил. А как мне добраться до массива $_AAA в третьем или четвертом вложении?
PHP:
function t1() {
    $_AAA = "Ля-Ля"
    function t2() {
        function t3() {
            тут нужен $_AAA
        }
    }
}
Извините что задаю тупые вопросы.
 

Фанат

oncle terrible
Команда форума
просто не надо вкладывать функции в функции, а пересмотреть структуру своего запутанного скрипта.
 

Astral Man

We Will Rock You
Автор оригинала: Фанат
просто не надо вкладывать функции в функции, а пересмотреть структуру своего запутанного скрипта.
Объясни пожалуста почему так нельзя делать?
 
Сверху