Forum Webscript.Ru

Программирование => PHP => Тема начата: Enemy от 13 Августа 2003, 15:29:40

Название: define
Отправлено: Enemy от 13 Августа 2003, 15:29:40
Чтобы изменить значение константы на странице - мне нужно перегружать страницу дважды...

Использую я их для обявления языка. как в PHP NUKE. но в нюке язык переключается сразу, а у меня остается прежний, только после перегрузки страницы (то есть уже второй раз) константы меняют значение.

потом я прочитал в хелпе -

Constants may not be redefined or undefined once they have been set;

не знаю как решить эту проблему. что посоветуете? удалить константу также не знаю как (вроди и невозможно).
Название: define
Отправлено: tserbis от 13 Августа 2003, 15:47:03
Может, КОНСТАНТЫ тебе не подходят?
Название: define
Отправлено: Enemy от 13 Августа 2003, 16:00:34
подходят. иначе уже не могу. все файлы уже с константами. перевод сайта на два языка. теперь нужно сделать так чтобы с перегрузкой страницы + выбран другой язык - изменялись константы и язык сайта.

там стоит простой switch -


switch ($_SESSION["lang"]){

case "ua" : { $file = "lang-ukrainian.php"; break;};
case "ru" : { $file = "lang-russian.php"; break;};
default : { $file = "lang-ukrainian.php"; break;};

}//endswitch

include_once("language/$file");


файл загружается, а константы не перегружаются. только после еще одного рефреша.
Название: define
Отправлено: Меняздесьдавнонет от 13 Августа 2003, 16:08:33
Ну вот что с такими делать?
Говорят ему - константы не подходят.
причем он САМ убедился, что таки не подходят.

И все равно будет талдычить.

Ну тогда ОПРЕДЕЛЯЙ константы ПОСЛЕ того, как выбрал язык.
А не ДО.

Если ты уж и этого не можешь сделать по идеологическим соображениям, то тебе остаетсся только застрелиться.
Название: define
Отправлено: Enemy от 13 Августа 2003, 16:21:40
Стрелятся мне не зачем. у меня с нервами все в порядке, не то что у некоторых. А спрашиваю я потому что в НЮКЕ это реализовано. И работает. Значит МОЖНО так сделать.
Название: define
Отправлено: Макс от 13 Августа 2003, 16:46:42
Enemy
Цитировать
switch ($_SESSION["lang"]){

    case "ua" : { $file = "lang-ukrainian.php"; break;};
    case "ru" : { $file = "lang-russian.php"; break;};
    default : { $file = "lang-ukrainian.php"; break;};

}//endswitch
у тебя до этого switch-а уже были константы определены ?
Цитировать
файл загружается, а константы не перегружаются. только после еще одного рефреша.
ты уверен что загружается именно нужный  файл ?

Предположение:

if (isset($_GET[\'lang\']) && in_array($_GET[\'lang\'], array(\'ru\',\'ua\')) {
   $_SESSION[\'lang\'] = $_GET[\'lang\'];
}
// далее твой switch
....
Название: define
Отправлено: Enemy от 13 Августа 2003, 16:58:23
1. Спасибо хорошему человеку за ответ - Макс .

вот мой текст кода -


session_start();
if ($_GET["lang"]) $_SESSION["lang"] = $_GET["lang"];
if (!$_SESSION["lang"]) $_SESSION["lang"] = "ua";


switch ($_SESSION["lang"]){

    case "ua" : { $file = "lang-ukrainian.php"; break;};
    case "ru" : { $file = "lang-russian.php"; break;};
    default : { $file = "lang-ukrainian.php"; break;};

}//endswitch

include_once("language/$file");



Это почти то же что ты и говорил.
2.
Цитировать
ты уверен что загружается именно нужный файл ?
- к сожалению уверен... проверял...
Название: define
Отправлено: Enemy от 16 Августа 2003, 17:18:23
что никто и никогда не использовал константы? я думаю что способ решения этой проблемы - был бы интересен всем.
Название: define
Отправлено: Меняздесьдавнонет от 16 Августа 2003, 21:05:21
Все использовали.
Но только именно как константы, а не как переменные.
во-первых, все используют константы именно как КОНСТАНТЫ.
число ПИ - константа.
она всегда равно одному и тому же числу.
а не так, что сегодня она равна 3, а завтра - 4.

И если исходить из этого, то твоих проблем ни у кого никогда не было.
Если значение надо менять, то тебе нужна не константа, а переменная!
Так что, к чужому опыту взывать не надо, если сделал без головы.
И никому решение этой "проблемы" неинтересо, потому, что никто на такие грабли не наступает просто.

Но раз уж ты влез с константами так, что переделать не можешь, то повторяю еще раз:
поскольку РНР яызк скриптовый, и выполняется заново каждый раз при просмотре страницы, нет никаких проблем определять константы ПОСЛЕ того, как ты определишься, наконец, что им присвоить.
Не ДО, чтобы потом переопределять, а ПОСЛЕ того, как ты из сессии прочтешь язык.

Если же тебе и это не под силу, то выражение "застрелиться" надо понимать фигурально. Это значит, что если ты не желаешь переделывать свою программу разумно, то так и будешь по два раза перезагружать.