Область видимости переменной

robinner

Новичок
Область видимости переменной

Здравствуйте, опять я...

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

function to()
{
global $to;
$style = 'style="background: url(img/hover.gif) no-repeat;color:#fff;"';
if(!isset($to)) $to='info';
switch($to)
{
case "info":
$inc = 'info';//- как достать имя tpl
$styleInfo = $style; //- и переменные стилей?
break;
case "photo":
$inc = 'photo';
$stylePhoto = $style;
break;
case "map":
$inc = 'map';
$styleMap = $style;
break;
}
делаю тут return, все равно не хочет передавать переменную за пределы...
}
помогите плиз
 

jonjonson

Охренеть
robinner, return "за пределы" передаёт значение (или ссылку на него), а не переменную. Думай.
 

sky_fox

Новичок
PHP:
function to() {
  global $to; 
  $style = 'style="background: url(img/hover.gif) no-repeat;color:#fff;"';
  $inc = isset($to) ? $to : 'info';

   return array('style' => $style, 'inc' => $inc); 
}


$test =  to();
print_r($test);

Зачем вам заводить кучу переменных вида styleXXX, если $inc однозначно определяет тип чего-то вашего.
 

robinner

Новичок
вот php файт :

function to()
{
global $to;
$style = 'style="background: url(img/hover.gif) no-repeat;color:#fff;"';
if(!isset($to)) $to='info';
switch($to)
{
case "info":
$inc = 'info';
$key = 1;
break;
case "photo":
$inc = 'photo';
$key = 2;
break;
case "map":
$inc = 'map';
$key = 3;
break;
}
$array = array(0 => $inc, $key => $style);
return $array;
}
$inc = to($array);



А вот tpl файл:


<div id="mainTop">
<a href="?do=main&id=<?=$id?>&to=info" <?=$inc[1]?>>Информация</a>
<a href="?do=main&id=<?=$id?>&to=photo" <?=$inc[2]?>>Фотографии</a>
<a href="?do=main&id=<?=$id?>&to=map" <?=$inc[3]?>>Карта</a>
</div>
<div id="infoIn">
<?if(!empty($inc)) include($inc[0].'.tpl');?>
</div>


Правильно? Или както можно сделать проще и красивее?

-~{}~ 26.03.10 12:44:

Зачем вам заводить кучу переменных вида styleXXX, если $inc однозначно определяет тип чего-то вашего.
Выше код, как вы думаете приемлим такой вариант?
 

sky_fox

Новичок
Какая-то анархия прямо.

1. выключите register_globals и работайте с $_GET['to'], а не $to
2. зачем вам $id?

PHP:
<?php 
  $pages = array ();
  $pages['info']  = 'Информация';
  $pages['photo'] = 'Фотографии';
  $pages['map']   = 'Карта';
  
  $selected_style  = 'style="background: url(img/hover.gif) no-repeat;color:#fff;"';
  $to = isset($_GET['to']) ? $_GET['to'] : 'info';
  
  
?>




<div id="mainTop">
 <?php 
    foreach ($pages as $name => $title) {
       echo '<a href="?do=main&to=' . $name . '" ' . (($to == $name) ? $selected_style : '') . '>' . $title . '</a>'; 
    }
 ?>
</div>
<div id="infoIn">
<?php
   if (array_key_exists($to,$pages)) include($to.'.tpl');
?>
</div>
 

robinner

Новичок
Ид нужен для просмотра профилей пользователя

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

sky_fox

Новичок
Автор оригинала: robinner
Ид нужен для просмотра профилей пользователя

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

Зачем вы тягаете в адресе $id пользователя? Храните в сессии
 

robinner

Новичок
Та дело не в определении просто от этой функции если сделать так как вы говорите потребуются разные задачи на разных страницах...

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