Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывод переменной до выполнения функции 
V
    Опции темы
pirrat
  Дата 21.2.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 21.2.2007

Репутация: нет
Всего: нет



Код

<?
global $a;
function maina() {
    global $a;
$a=1;
$b=2;
echo $b;
}
echo $a;
maina();

?>


как видим переменная $a определена в функции,которая потом выполняется,но мне нужно вывести эту переменную до того как функция выполнена,
вопрос как? как видим обьявление глобальных переменных не помогает...

Сорри,я только начал изучать php,поэтому задаю такие глупые вопросы...

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

Это сообщение отредактировал(а) pirrat - 21.2.2007, 19:11
PM MAIL   Вверх
vasac
Дата 21.2.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



И на основании каких результатов мы видим, что не помогает?

global вне функции, кстати ненужен.
Так же перед выводом переменной желательно ее инициализировать.
PM WWW   Вверх
pirrat
Дата 21.2.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 21.2.2007

Репутация: нет
Всего: нет



на основании выполнения скрипта, переменная $a не выводится.. 
PM MAIL   Вверх
mishaSL
Дата 21.2.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Вот пример:
Код

<?php
$a = 1;
function maina() {
    global $a;
    $a=555;
    $b=2;
    echo $b;
}
echo $a; // должно вывести 1
maina(); // здесь соответственно фун-ия выведит $b, т.е. 2
echo $a; // должно вывести 555
?>



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
pirrat
Дата 21.2.2007, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 21.2.2007

Репутация: нет
Всего: нет



мне нужно вывести переменную из функции  ДО её выполнения!

в вашем примере переменная из функции выводиться после выполнения функции....

кароче это совсем не то.....

Это сообщение отредактировал(а) pirrat - 21.2.2007, 20:33
PM MAIL   Вверх
mishaSL
Дата 21.2.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



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


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
pirrat
Дата 21.2.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 21.2.2007

Репутация: нет
Всего: нет



ладно,попробую описать полностью проблему,иб вы вообще скажете что я не правильно сделал и натолкнёте на другой вариант...

пишу движок с использованием библиотеки smarty!
есть фаил index.php
Код

$m=$_GET['m']; // в переменной $m через get передаётся название модуля...
function mods(){ //функция определения модуля
    global $title,$m;
    if (!isset($m)){ 
        $module = "home.php";
        }
elseif(isset($m)) {
$module = "".$m.".php";
}
include("".$module.""); //инклудим нужный модуль,в нашем примере это будет pages.php
}
//парсим в шаблон
$smarty = new temp;
$smarty->register_function("modules", "mods"); //регистрируем функцию mods,для вывода её в шаблоне

$smarty->assign(array('url'=>"".$url."",
'sitename'=>"".$sitename."",
'keywords'=>"".$keywords."",
'descript'=>"".$descript."",
'title'=>"".$title."" //парсим переменную title котрая берётся из погруженного файла pages.php
)); //парсим переменные
$smarty->display('index.tpl'); //выводим шаблон

как видно парсится всё в шаблон index.tpl :
 
Код

блаблабла
<head>
<title>{$title} <!-- титл страницы,который берётся из модуля--></title>
</head>
<body>
{modules} <!-- выполняем зарегистрированную функцию mods из файла php -->
</body>


допустим в index.php инклудится модуль pages.php
вот его примерное содержание:
Код

$p=$_GET['p'];
$valid = $db->query("SELECT * FROM ".$basepref."_pages WHERE pages='$p'");
$item = $db->fetchrow($valid);  //делаем запросы в бд....
$title= "".$item['title']."";  //титл страницы который должен выводиться в шаблоне index.tpl
//парсим в шаблон pages.tpl
$smarty = new temp;
$smarty->assign(array('text'=>"".$item['text'].""));
$smarty->display('pages.tpl'); 



а вот теперь суть всей проблемы: функция выполняется и всё прекрасно выводиться ,кроме ТИТЛА,т.е. переменной $title
,так как она определяется уже после того как должна быть выведена в шаблон! 

Это сообщение отредактировал(а) pirrat - 21.2.2007, 21:38
PM MAIL   Вверх
mishaSL
Дата 21.2.2007, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Если несильно переписывать могу предложить следующее решение:
Код

$m=$_GET['m']; // в переменной $m через get передаётся название модуля...
function mods($m){ //функция определения модуля
    if (!isset($m)){ 
        $module = "home.php";
        }
     elseif(isset($m)) {
        $module = "".$m.".php";
      }

ob_start();
include("".$module.""); //инклудим нужный модуль
$content = ob_get_contents();
ob_end_clean();

return array('title'=>$title, 'content'=>$content);
}

$data = mods($m);
//парсим в шаблон
$smarty = new temp;
$smarty->assign(array('url'=>"".$url."",
'sitename'=>"".$sitename."",
'keywords'=>"".$keywords."",
'descript'=>"".$descript."",
'modules'=>"".$data['content']."",//парсим содержимое модуля
'title'=>"".$data['title']."" //парсим переменную title котрая берётся из погруженного файла pages.php
)); //парсим переменные
$smarty->display('index.tpl'); //выводим шаблон


И соответственно в index.tpl {modules} меняешь на {$modules}


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
pirrat
Дата 21.2.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 21.2.2007

Репутация: нет
Всего: нет



Респект тебе  smile 

30 мин назад читал на этом фоуме в теме про Smarty об функциях ob_*() ,только не успел поэксперементировать с ними!


Спасибо огромное!
PM MAIL   Вверх
mishaSL
Дата 21.2.2007, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



pirrat, всегда пожалуйста smile 


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.5004 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.