PHP - Лучшая практика для передачи переменных для включения файлов

Это больше похоже на «Как должен мне?» а не "Как я ?" вопрос.

Как правило, что считается лучшим способом передачи переменных во включенный файл?

Например, предположим, что я использую фрагмент для меню и хочу, чтобы один из пунктов меню (текущий) ), чтобы иметь определенное имя класса (это очень общий пример - я не использую его на самом деле):

<?php
$links = array(
    array('text' => 'home', 'href' => 'home.php'),
    array('text' => 'about', 'href' => 'about.php'),
    array('text' => 'contact', 'href' => 'contact.php') 
);
?>
<ul>
<?php for($i = 0; $i < 3; $i++) : 
    $link = $links[$i];
    $is_active = ($i == $active_index);
?>
    <li><a <?=($is_active ? 'class="active"' : '')?> href="<?=$link['href']?>"><?=$link['text']?></a></li>
<?php endfor; ?>
</ul>

я назову приведенный выше "menu.inc.php". очевидно, он ищет переменную (int) с именем $ active_index , чтобы определить, какую ссылку передать класс '.active'.

, так что вы можете просто определить $ active_index перед вызов include, но мне это кажется плохой практикой, поскольку, возможно, переменная с таким именем могла быть определена для чего-то еще раньше, и более поздняя часть скрипта все еще ищет ее.

или - вы можете использовать абсолютный путь и добавлять переменные с помощью строки запроса ( include 'menu.inc.php? Active_index = 1' ), но опять же это кажется плохой идеей, поскольку вам может понадобиться «реальный» $ _ GET в любом заданном include .

или - вы можете запустить каждый включенный файл с ob_start и вернуть ob_end_clean () , затем используйте что-то вроде этого, чтобы получить результат:

function load_view($file, $variables){
  extract($variables);
  return include($file);
}
// passed like
<?=load_view('menu.inc.php', array('active_index' => 2))?>

, но, опять же, у этого есть ряд недостатков (необходимость реструктурировать все ваши включаемые файлы соответственно с помощью функций ob и ] return оператор).

6
задан hakre 18 April 2013 в 16:08
поделиться