Перейти к содержимому

Сервис обмена электронных валют


Переменная не передается в функцию.

#1 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0
0

Отправлено 10 Ноябрь 2009 - 12:18

Есть двумерный массив, который задается так
$navi[] = array("$adminfile?adm=Account", "Аккаунт"); 
 $navi[] = array("$adminfile?adm=Account&do=Edit", "Редактировать"); 
 $navi[] = array("$adminfile?adm=Account&do=Configure", "Конфигурация");

Плюс функция, которая его обрабатывает

function navigation($array) {
$navi = "<center>";
foreach($array as $key=>$value) {
$navi .= "| <a href='".$value[0]."'>".$value[1]."</a> |";
}
$navi .= "</center>";
return $navi;
}

Почему, при передаче его в функцию с помощью global, она не доступна в функции.
Вот как оформляю

<?php
$navi[] = array("$adminfile?adm=Account", "Аккаунт"); 
 $navi[] = array("$adminfile?adm=Account&do=Edit", "Редактировать"); 
 $navi[] = array("$adminfile?adm=Account&do=Configure", "Конфигурация"); 
$navigation = navigation($navi);

function Account() {
global $navigation;

echo $navigation;
}
Account();
?>

Не отображает ничего.

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Ноябрь 2009 - 12:13

Приучаемся
echo $GLOBALS['navigation'];


Причём это не передача переменной в функцию, это один из обходных путей который часто очень затрудняет отладку программы.
  • 0

#3 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 11 Ноябрь 2009 - 12:16

А почему тогда остальные переменные передаются вообще без проблем?
  • 0

#4 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 11 Ноябрь 2009 - 12:22

И, кстати, либо я не понял, либо не работает тоже. =)
  • 0

#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Ноябрь 2009 - 12:45

gaaarfild, да не передаются они, а ты просто оформляешь их как глобальные, поэтому они даже видны в функциях(ограниченной области). Советую тебе напрямую при вызове функции передавать значение переменной в качестве параметра, тогда и подобных вопросов возникать не должно.

Делай всегда так:
function navigation($array) {
$navi = "<center>";
foreach($array as $key=>$value) {
$navi .= "| <a href='".$value[0]."'>".$value[1]."</a> |";
}
$navi .= "</center>";
return $navi;
}

function Account($param) {
echo $param;
}

$navi[] = array("$adminfile?adm=Account", "Аккаунт");
$navi[] = array("$adminfile?adm=Account&do=Edit", "Редактировать");
$navi[] = array("$adminfile?adm=Account&do=Configure", "Конфигурация");

$navigation = navigation($navi);
Account($navigation);


Иначе и в функциях смысла нету. Функция нужна для однотипных действий выполняющихся над различными параметрами и возвращающими результат. А ты используешь функцию... Прямо с самого начала разрезаешь её, вталкиваешь туда глобальные переменные, от которых функция зависеть вообще не должна. Функция и сделана ограниченной для того чтобы она имела доступ только к тому что ей позволено и нужно для работы. Она не должна принимать во внимание внешние факторы(глобальные переменные)
  • 0

#6 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 11 Ноябрь 2009 - 13:09

Безусловно, я понимаю этот факт. Но тут есть небольшая такая вещь. =) Это модуль. У него есть разные действия, которые только для этого модуля, но идентичные для всех функций данного модуля. Поэтому было бы проще передавать их как глобальные, потому что так удобнее. Задать их значение в модуле, но за пределами функций и просто объявлять их глобальными в пределах всего файла. Мне так удобнее. Как параметры передавать мне будет вообще неудобно. Может все таки есть способ сделать как у меня? Просто почему переменные объявленные глобальными в пределах этого файла, и заданные в нем же - недоступны, а объявленные в пределах этого файла, но заданные в родительском файле - доступны?
  • 0

#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Ноябрь 2009 - 19:14

gaaarfild,
А ты вне функции проверял? То выводит или нет?
  • 0

#8 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 11 Ноябрь 2009 - 21:21

Да. Вне функции доступна абсолютно нормально.
  • 0

#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 16 Ноябрь 2009 - 00:56

gaaarfild, Вот код который ты привёл выше, покажи в каких файлах этот код у тебя находится, и в какой последовательности и как ты их подключаешь.
  • 0

#10 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 16 Ноябрь 2009 - 13:33

Вот этот код находится в файле module.php
<?php
$navi[] = array("$adminfile?adm=Account", "Аккаунт");
$navi[] = array("$adminfile?adm=Account&do=Edit", "Редактировать");
$navi[] = array("$adminfile?adm=Account&do=Configure", "Конфигурация");
$navigation = navigation($navi);

function Account() {
global $navigation;

echo $navigation;
}
Account();
?>


index.php - это шаблонизатор, в котором подключается module.php

Так же есть файл templ.php, который подключается в файле index.php и в нем задается функция navigation();
function navigation($array) {
$navi = "<center>";
foreach($array as $key=>$value) {
$navi .= "| <a href='".$value[0]."'>".$value[1]."</a> |";
}
$navi .= "</center>";
return $navi;
}


массив для передачи в функцию navigation(); формируется в файле module.php как мы видим, и имеет имя $navi;

Так же в файл index.php подключаются другие файлы, например конфигурации, в которых хранятся переменные.

так вот.
Когда мы в файле module.php создаем функцию, то в ней прописываем
function bla-bla(){
global $config, $navigation;

}


Почему $config - свободно доступна в функции bla-bla(); а $navigation вообще не определена.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru