X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Переменная не передается в функцию.
gaaarfild
gaaarfild
Topic Starter сообщение 10.11.2009, 13:18; Ответить: gaaarfild
Сообщение #1


Есть двумерный массив, который задается так
$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
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 11.11.2009, 13:13; Ответить: ZiTosS
Сообщение #2


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

Причём это не передача переменной в функцию, это один из обходных путей который часто очень затрудняет отладку программы.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
Topic Starter сообщение 11.11.2009, 13:16; Ответить: gaaarfild
Сообщение #3


А почему тогда остальные переменные передаются вообще без проблем?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
Topic Starter сообщение 11.11.2009, 13:22; Ответить: gaaarfild
Сообщение #4


И, кстати, либо я не понял, либо не работает тоже. =)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 11.11.2009, 13:45; Ответить: ZiTosS
Сообщение #5


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

Делай всегда так:
[php]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);[/php]

Иначе и в функциях смысла нету. Функция нужна для однотипных действий выполняющихся над различными параметрами и возвращающими результат. А ты используешь функцию... Прямо с самого начала разрезаешь её, вталкиваешь туда глобальные переменные, от которых функция зависеть вообще не должна. Функция и сделана ограниченной для того чтобы она имела доступ только к тому что ей позволено и нужно для работы. Она не должна принимать во внимание внешние факторы(глобальные переменные)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
Topic Starter сообщение 11.11.2009, 14:09; Ответить: gaaarfild
Сообщение #6


Безусловно, я понимаю этот факт. Но тут есть небольшая такая вещь. =) Это модуль. У него есть разные действия, которые только для этого модуля, но идентичные для всех функций данного модуля. Поэтому было бы проще передавать их как глобальные, потому что так удобнее. Задать их значение в модуле, но за пределами функций и просто объявлять их глобальными в пределах всего файла. Мне так удобнее. Как параметры передавать мне будет вообще неудобно. Может все таки есть способ сделать как у меня? Просто почему переменные объявленные глобальными в пределах этого файла, и заданные в нем же - недоступны, а объявленные в пределах этого файла, но заданные в родительском файле - доступны?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 11.11.2009, 20:14; Ответить: ZiTosS
Сообщение #7


gaaarfild,
А ты вне функции проверял? То выводит или нет?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
Topic Starter сообщение 11.11.2009, 22:21; Ответить: gaaarfild
Сообщение #8


Да. Вне функции доступна абсолютно нормально.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 16.11.2009, 1:56; Ответить: ZiTosS
Сообщение #9


gaaarfild, Вот код который ты привёл выше, покажи в каких файлах этот код у тебя находится, и в какой последовательности и как ты их подключаешь.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
Topic Starter сообщение 16.11.2009, 14:33; Ответить: gaaarfild
Сообщение #10


Вот этот код находится в файле module.php
[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();
?>[/php]

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

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

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

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

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

}[/php]

Почему $config - свободно доступна в функции bla-bla(); а $navigation вообще не определена.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Добавить к коду кнопки функцию Canvas
0 Anshag 5059 25.11.2015, 12:41
автор: -Anshag-
Открытая тема (нет новых ответов) Написать функцию, для проверки правильности заполнения поля "отчество" в форме.
0 Ангелина2014 2407 5.3.2014, 0:59
автор: -Ангелина2014-
Открытая тема (нет новых ответов) Помогите! Мучаюсь! Как в функцию засунуть несколько циклов?
9 dfcan 7870 7.8.2012, 18:55
автор: -cyber_ua-
Открытая тема (нет новых ответов) Написать функцию для интернет магазина
0 Vjik_hb 3078 3.8.2012, 19:26
автор: -Vjik-


 



RSS Текстовая версия Сейчас: 28.3.2024, 14:37
Дизайн