Как передать переменную из одной функции в другую?

Статус
В этой теме нельзя размещать новые ответы.
А вот тут по подробнее пожалст)) Как очистить?))
ну я делал так,
unset();да хорошо но из глобального массива данные не всегда удаляются
значит нада делать что то подобное

PHP:
// присваиваем значению null
$GLOBALS['MyVar']=null;
// пытаемся ее удалить из глобально массива
unset($GLOBALS['MyVar']);
// пытаемся удалить локальную
unset($MyVar);
}

в каждой функции лучше делай unset() переменных которы тебе больше не понадобятся, хотя как говорят что PHP сам их уничтожает, но когда запускаешь отдалчит почему то их видно, и они не уничтожаются (( так что лучше самому) как например под Win платформами не всегда корректно работает trim();


а сейчас у меня структура кода

PHP:
/**
*  Класс Шаблонов
*/
class Template
{
var $version=0.02;

var $template = null;
var $module = null;
var $panel = null;
var $block = null;
var $backup = array();
var $data = array();
var $result = array();

function set($key,$value)
{
}

function load($tpl=false,$mod=false,$mode='template')
{
global $engine;
}

function clear($tpl=false,$mode='')
{
 switch($mode):
 	case "panel":
 	  $this->panel=null;
	break;
	case "block":
	  $this->block=null;
	break;
	case "module":
	  $this->module=null;
		$this->data=null;
  	$this->data=array();
	break;
  case "template":
    $this->template=null;
		$this->data=null;
  	$this->data=array();
    $this->unload();
  break;
endswitch;
if($tpl):
  if(isset($this->result[$tpl])): $this->result[$tpl]=null; unset($this->result[$tpl]); endif;
endif;
}

function unload()
{
$this->template = null;
$this->module = null;
$this->panel = null;
$this->block = null;
$this->backup = null;
$this->data = null;
$this->data = array();
$this->result = null;
$this->result = array();
}

function backup($key='backup')
{
$this->backup[$key]['data']=$this->data;
$this->backup[$key]['result']=$this->result;
$this->data=null;
$this->data=array();
$this->result=null;
$this->result=array();
}

function restore($key='backup')
{
$this->data=$this->backup[$key]['data'];
$this->result=$this->backup[$key]['result'];
$this->backup[$key]=null;
$this->backup[$key]=array();
unset($this->backup[$key]);
}

function compile($tpl=false,$mode='template')
{
}


класс модуля
var $fields=array(

'id'=>false,       //идентификатор
'short_name'=>false,      //группа
'full_name'=>false,      //организация
'tip'=>null,     //логин
'otdelen'=>null,  //пароль
'plat_name'=>null,     //email
'sthet_id'=>null,      //имя
'inn'=>null,   //фамилия
'kpp'=>null,  //откуда
);

global $engine;
$this->header();
$engine->template->set('{action}', XPAGE."?x=".$this->mod);
$engine->template->set('{task}', 'update');
foreach($this->fields as $column=>$value):
  $engine->template->set('{'.$column.'}', $value);
endforeach;
$engine->template->load('form',$this->mod,'module');
$engine->template->compile('org_form','module');
echo $engine->template->result['org_form'];
$engine->template->clear('org_form','module');
$this->footer();
 
А смысл в умалчиваемом значении NULL или ''? ТС нужно же наоборот, глобальную переменную передавать в функции. А если она не передается (забыли написать при вызове), с умалчиваемыми значениями PHP такое уже пропустит, локальной $menu будет присвоена пустая строка или NULL... Не пойму, в чем смысл передачи умалчиваемых значений?
 
Смысл в том что любую переменную надо инициализировать у себя в скрипте иначе ее помогут инициализировать другие...пустое значение или NULL решает эту задачу...даже если по каким то причинам скрипт не получит (в данном случае..) глобальной переменной то ничего страшного не произойдет т.к переменная эта уже определена... ошибка не выскачет и подинклюдить ее (эту переменную) уже никто не сможет...элементарная защита скрипта...
 
Смысл в том что любую переменную надо инициализировать у себя в скрипте иначе ее помогут инициализировать другие...пустое значение или NULL решает эту задачу...даже если по каким то причинам скрипт не получит (в данном случае..) глобальной переменной то ничего страшного не произойдет т.к переменная эта уже определена... ошибка не выскачет и подинклюдить ее (эту переменную) уже никто не сможет...элементарная защита скрипта...

Но у ТС про инклуд ни слова... Нужно просто передать глобальную переменную в функцию. В то же время ваш способ подразумевает вставку доп.проверок в функции - NULL (или '') сейчас переменная или нет. Что дополнительно усложняет код, ИМХО.
 
У меня похожая проблема не выводятся {amount} и {amountbig}? Подскажите где я затупил?

Код:
<?php

  	if  ( !defined ( "DATALIFEENGINE" ))
  	{
  		die ( "Hacking Attemp!" );
  	}

  	$goods_info = $db->super_query ( "SELECT * FROM " . PREFIX . "_shop WHERE id = '{$good_id}'" );

  	if ( !isset ( $goods_info['id'] ))
  	{
		msgbox ( "Внимание, обнаружена ошибка", "По данному запросу не найдено ни одного товара!" );
  	}
  	else
  	{

  		 if ( $is_logged and $member_id['user_group'] <= 3 )
  		{
  			 $goods_info['amount'] = $goods_info['user_amount'];
  		}

		$tpl->load_template ( 'shop/full.tpl' );

		$tpl->set ( '{code}', 		$goods_info['code'] );
		$tpl->set ( '{amount}',		$goods_info['amount'] );
		$tpl->set ( '{amountbig}',		$goods_info['amountbig'] );

		$tpl->set ( '{descr}',		stripslashes ( $goods_info['good_descr'] ));
		$tpl->set ( '{title}', 		stripslashes ( $goods_info['title'] ));

		$tpl->set ( '{category}', "<a href=\"{$config['http_home_url']}shop/" . $shop_category [ $goods_info['category'] ]['alt_name'] . "/\">" . stripslashes ( $shop_category[ $goods_info['category'] ]['title'] ) . "</a>" );

		$tpl->set ( '{foto}', $config['http_home_url'] . "uploads/shop/thumbs/" . $goods_info['foto'] );
		$tpl->set ( '{fotogorka}', $config['http_home_url'] . "uploads/shop/thumbs/" . $goods_info['fotogorka'] );

                if ($member_id['user_group'] <= 3)
                {
                
                	if ( $goods_info['amount'] > 0 and $goods_info['amountbig'] > 0 )
                	{
                            $diler = <<<HTML
<tr>
  <td valign="top">
  Цена 50 гр.: <strong>{amount} рублей</strong><br /><br />
  Цена 1,6 кг: <strong>{amountbig} рублей</strong><br /><br />
<input type="button" class="bbcodes" style="width:130px; height:20px; cursor:hand" value="Вернуться в магазин" onclick="history.back()" /> &nbsp;&nbsp;&nbsp;
<input type="button" class="bbcodes" value="Заказать" onClick="add_cart('{$goods_info['id']}'); return false;" />	</td>
</tr>
HTML;
			 		}
                    
					if ( $goods_info['amount'] <= 0 and $goods_info['amountbig'] > 0 )
                	{
                            $diler = <<<HTML
<tr>
  <td valign="top">
  Цена 1,6 кг: <strong>{amountbig} рублей</strong><br /><br />
<input type="button" class="bbcodes" style="width:130px; height:20px; cursor:hand" value="Вернуться в магазин" onclick="history.back()" /> &nbsp;&nbsp;&nbsp;
<input type="button" class="bbcodes" value="Заказать" onClick="add_cart('{$goods_info['id']}'); return false;" />	</td>
</tr>
HTML;
			 		}
                    
					if ( $goods_info['amount'] > 0 and $goods_info['amountbig'] <= 0 )
                	{
                           $diler = <<<HTML
<tr>
  <td valign="top">
  Цена 50 гр.: <strong>{amount} рублей</strong><br /><br />
<input type="button" class="bbcodes" style="width:130px; height:20px; cursor:hand" value="Вернуться в магазин" onclick="history.back()" /> &nbsp;&nbsp;&nbsp;
<input type="button" class="bbcodes" value="Заказать" onClick="add_cart('{$goods_info['id']}'); return false;" />	</td>
</tr>
HTML;
			 		}                                  
                
                }
				else 
                {
                 $diler = null;
                }

				 
                 $tpl->set ( '{amount}', stripslashes ($goods_info['amount'] ));
                 $tpl->set ( '{amountbig}', stripslashes ($goods_info['amountbig'] ));
				 $tpl->set ( '{diler}', $diler );


		$tpl->set_block ( "'\\[img-full\\](.+?)\\[/img-full\\]'si", "<a href=\"{$config['http_home_url']}uploads/shop/{$goods_info['foto']}\" target=\"_blank\">\\1</a>" );

		$tpl->compile ( 'content' );
	}

?>

функция
PHP:
$tpl->compile ( 'content' );
выполняет замены только в шаблоне, загруженном здесь:
PHP:
$tpl->load_template ( 'shop/full.tpl' );
и не делает замен в значениях, на которые надо заменять (т.е. нет вложенности). Поэтому бесполезно задавать шаблоны в переменных:
PHP:
$diler = <<<HTML
<tr>
  <td valign="top">
  Цена 50 гр.: <strong>{amount} рублей</strong><br /><br />....
Они просто не будут заменяться. Вместо шаблонов следует сразу вставлять их значения, к тому же они под рукой:
PHP:
$diler = <<<HTML
<tr>
  <td valign="top">
  Цена 50 гр.: <strong>{$goods_info['amount']} рублей</strong><br /><br />
 
XSiteCMS, бррррр(( Че то нее могу вкурить.. вот есть такое:
PHP:
...
//Шаблон главный
$main_tpl = new template;
$main_tpl->load("templates/index_tpl.htm");
$main_tpl->replace("{header}", "Заголовок"); 

//Шаблон профайлов
$profile_tpl = new template;
$profile_tpl->load("templates/profile_tpl.htm");

//Шаблон профайлов_old
$ex_profile_tpl = new template;
$ex_profile_tpl->load("templates/ex_profile_tpl.htm");

$profile_tpl->replace("{nick}", $myrow['nick']); 
$profile_tpl->replace("{foto}", $myrow['foto']); 
$profile_tpl->replace("{name}", $myrow['name']); 
$profile_tpl->replace("{pol}", $myrow['pol']); 
$profile_tpl->replace("{data}", $myrow['data']); 
$profile_tpl->replace("{dis}", $myrow['dis']); 
$profile_tpl->replace("{debut}", $myrow['debut']); 
$profile_tpl->replace("{icq}", $myrow['icq']); 
$profile_tpl->replace("{biog}", $myrow['biog']); 

$ex_profile_tpl->replace("{nick}", $myrow['nick']); 
$ex_profile_tpl->replace("{foto}", $myrow['foto']); 
$ex_profile_tpl->replace("{name}", $myrow['name']); 
$ex_profile_tpl->replace("{pol}", $myrow['pol']); 
$ex_profile_tpl->replace("{data}", $myrow['data']); 
$ex_profile_tpl->replace("{dis}", $myrow['dis']); 
$ex_profile_tpl->replace("{debut}", $myrow['debut']); 
$ex_profile_tpl->replace("{out}", $myrow['out']); 
$ex_profile_tpl->replace("{reason}", $myrow['reason']); 
$ex_profile_tpl->replace("{icq}", $myrow['icq']); 
$ex_profile_tpl->replace("{biog}", $myrow['biog']); 
...
Как это все упаковать? Вот эти все замены понятно дело что громоздко, их как то нужно упаковать, но как - че то туплю(( Если через массив, то получается тоже на тоже..хм
 
может я не прав да и мне надо набрать 6 постов, но юзать глобальные переменные не есть гуд на мой взгляд
 
2 Panzers^) а я же говорил кажется что это мой класс, а форрич юзаю для сокращения строк кода и автоматизации мне достаточно в запрос добавить поле и в шаблон и все.... он сам выведется... ))

я создаю фрейм ворк для нашей организации, на нем так же я буру развивать свою CMS которая сейчас работает нафаилах, увы... теперь СуБД с разными драйверами и системой полуавтоматических запросов ))
 
если переменная определена в функции то она видна только в области этой функции, если она определена вне функции то она будет видна везде, кроме другого скрипта) отсюда и ведут два термина локальная переменная и глобальная,
ну и супер глобальные массивы Get, Post как бы объясняют свое название)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху