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


× Быстрый вопрос
Пользователь месяца
dos1k dos1k 1-й за Май
Очков активности: 1 194 28 тем, 115 сообщений, 4 балла репутации
Сайт: dos1k.ru
ТОП самых активных за этот месяц
  • Фотография Olya23
    #1

    Olya23
    Очков активности: 696 3 темы, 107 сообщений, 4 балла репутации

  • Фотография Rodiola
    #2

    Rodiola (rukodelkovo.ru)
    Очков активности: 414 0 тем, 69 сообщений, 4 балла репутации

  • Фотография maxnik
    #3

    maxnik (konovalovpavel.ru)
    Очков активности: 85.5 0 тем, 19 сообщений, 3 балла репутации

  • Фотография agrx
    #4

    agrx (key-assort.ru)
    Очков активности: 54 0 тем, 18 сообщений, 2 балла репутации

  • Фотография fedornabilkin
    #5

    fedornabilkin (plohoneponyal.ru)
    Очков активности: 42 0 тем, 14 сообщений, 2 балла репутации

  • Фотография BLIK
    #6

    BLIK
    Очков активности: 40.5 Вне конкурса за определение пользователя месяца

  • Фотография Андрей WPMasterKZ
    #7

    Андрей WPMasterKZ (wpmaster.kz)
    Очков активности: 36 0 тем, 24 сообщения, 1 балл репутации

  • Фотография re-search
    #8

    re-search
    Очков активности: 36 5 тем, 9 сообщений, 1 балл репутации

  • Фотография Ixman
    #9

    Ixman (o5cat.ru)
    Очков активности: 24 0 тем, 8 сообщений, 2 балла репутации

  • Фотография Artos
    #10

    Artos
    Очков активности: 21 0 тем, 7 сообщений, 2 балла репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 24.05.2019
  • Яндекс выдача: 17.06.2019
Топ 5 участников по репутации


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

#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

#11 ZiTosS

ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

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

gaaarfild, я могу ошибаться, но скорее всего у тебя функция navigation исполняется позже bla-bla, если нет, то распечатай массив глобальных переменных $GLOBALS, если эта переменная вне функции, она должна быть помещена именно туда.
  • 0

#12 gaaarfild

gaaarfild
    Topic Starter
  • Неактивные
  • 596 сообщений
  • Репутация: 0

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

Сам ключ существуетА значений для него нет...

Array ([navi] => )

  • 0

#13 ZiTosS

ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 17 Ноябрь 2009 - 20:05

gaaarfild, Это ты в каком месте проверяешь? Ведь navi это не navigation
  • 0

#14 gaaarfild

gaaarfild
    Topic Starter
  • Неактивные
  • 596 сообщений
  • Репутация: 0

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

Все верно. Я просто переделывал название переменной для форума. Оно у меня называется $navi.
  • 0

#15 ZiTosS

ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

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

gaaarfild, Так что? Всё заработало? Если нет, ты ведь так и не написал в какой последовательности и не показал иерархию(дерево) включений файлов... Покажи мне содержимое файла module.php
  • 0

#16 gaaarfild

gaaarfild
    Topic Starter
  • Неактивные
  • 596 сообщений
  • Репутация: 0

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

Как это не показал? А вот это разве не иерархия???

index.php - к нему подключается config.php, module.php, и functions.php, в котором хранится функция navigation();

Вот файл module.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;
}

function Edit() {
global $navigation;

echo $navigation;
//--Код функции
}

function Configure() {
global $navigation;

echo $navigation;
//--Код функции
}


switch($_GET['do']) {
case "Account": Account(); break;
case "Edit": Edit(); break;
case "Configure": Configure(); break;
default: Account(); break;
}


  • 0

#17 ZiTosS

ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

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

gaaarfild, сделай так:
$navigation = navigation($navi);
echo $navigation; //проверим вернулось ли нужное нам значение в $navigation


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

#18 gaaarfild

gaaarfild
    Topic Starter
  • Неактивные
  • 596 сообщений
  • Репутация: 0

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

если не отделяется функцией, то содержимое выводится. Например если вывод идет сразу после задания переменной как у тебя здесь указано.
  • 0

#19 ZiTosS

ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

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

gaaarfild, попытался запустить ваши эти 2 файла отдельно, подключив один в другой. Убрал лишние несуществующие функции. Меню у меня вывелось прям в функции Account()
Даже не знаю что сказать, ты проверь в каждой точке программы где может произойти сбой с данными значениями. Так сказать невозможно...
  • 0

robot

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


Похожие темы

  Название темы Автор Статистика Последнее сообщение

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