Видимость переменных в функциях

Статус
В этой теме нельзя размещать новые ответы.

wireworm

Новичок
Видимость переменных в функциях

Добрый день!

есть файл lang.php - в нём обьявленны некоторые переменные

в основном скрипте (script.php)
выполняется require("lang.php");

далее в скрипте есть функция

function myFunc($arg)

как сделать так что бы переменные скрипта быди видны не только просто в теле скрипта но и в функции тоже

пробовал в lang.php использовать global - ничего путного не выходит...

Заранее Спасибо!
 

Dovg

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

wireworm

Новичок
файлик содержит строковые переменные
$a = 'строка';
$b = 'строка';
$c = 'строка';
$d = 'строка';

при использовании global вижу следующее
точнее
global $a = "строка";

Parse error: syntax error, unexpected '=', expecting ',' or ';' in /var/www/lang/russian.php on line 6

-~{}~ 09.06.08 16:48:

передовать функции 60 с лишним аргументов думаю неочень хорошее решение :)

-~{}~ 09.06.08 16:53:
 

Фанат

oncle terrible
Команда форума
если тебе нужно передавать в функцию 60 переменных, это значит, что у тебя неправильно используются функции вообще.

а где ты пишешь это свое global?
 

zaartix

Новичок
Автор оригинала: wireworm
файлик содержит строковые переменные
$a = 'строка';
$b = 'строка';
$c = 'строка';
$d = 'строка';

при использовании global вижу следующее
точнее
global $a = "строка";

Parse error: syntax error, unexpected '=', expecting ',' or ';' in /var/www/lang/russian.php on line 6

-~{}~ 09.06.08 16:48:

передовать функции 60 с лишним аргументов думаю неочень хорошее решение :)

-~{}~ 09.06.08 16:53:
PHP:
function foo ($arg) {
global $a;
$a = 'string';
}
а вообще обычно текстовые переменные, вроде локализаций держат в ассоциативных массивах ($lang[a]='строка'; $lang='срока'; ) как раз для того, чтобы глобальной переменной объявлять только одну, к примеру $lang, а лучше просто функция
PHP:
function l($eng_str) {
$lang['string']='строка'; 
$lang['another string']='другая строка';
$lang['feedback']='обратная связь';
return $lang[$eng_str];
}
про функцию - это сугубо имхо, не навязываю, но мне кажется наиболее удобным именно такой вариант, т.к. в дальнейшем эту функцию можно навернуть (как это сделано в cms drupal): сам перевод лежит в бд, если индекс $eng_str не встречается - то он заносится в бд как английский вариант и помечается, что не имеет русского перевода. Ну и инглишь ес-но отдельным переводом. Жутко удобно получается и довольно быстро работает, т.к. $eng_str смело можно делать primary key
 

john.brown

просто кулибин
Конечно будет ругаться. Посмотри синтаксис global http://ru2.php.net/global
 

wireworm

Новичок
хотелось бы в идиале не дублировать переменные в теле функции. варианты:
function myfunc($lang_arr)
и
function myfunc($arg)
{
global $a;
global $b;
global $c;
}

не очень нравятся.
в массив перестраивать файлик русификации довольно трудно, так как вцелом эта вся "програмка" изначально разрабатывалась не мной, и написано там уже довольно много всего. При таких изменениях по сути придётся переписывать все =). эти варианты я в принципе знал, ничего другого придумать в этой ситуации нельзя?!

-~{}~ 10.06.08 07:59:

все таки сделал так:

function myfunc($arg)
{
global $a;
global $b;
global $c;
}

=)
всем спаибо!
 

Dovg

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

Фанат

oncle terrible
Команда форума
wireworm, чья бы корова мычала, а твоя бы - скромно помолчала.
 

Dovg

Продвинутый новичок
Так то ***** уже все ответил ;)
wireworm
У тебя математика была в средней школе?
что такое функция? ну например y=sin(x); (Предлагаю найти информацию самостоятельно)

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

StUV

Rotaredom
Тема закрыта.

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

-~{}~ 10.06.08 13:06:

wireworm
вам бы самое время почитать что-нибудь по основам программирования вообще - что такое переменные, функции, области видимости и т.п... - а потом уже пытаться что-то писать на php
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху