Это больше похоже на «Как должен мне?» а не "Как я ?" вопрос.
Как правило, что считается лучшим способом передачи переменных во включенный файл?
Например, предположим, что я использую фрагмент для меню и хочу, чтобы один из пунктов меню (текущий) ), чтобы иметь определенное имя класса (это очень общий пример - я не использую его на самом деле):
<?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
оператор).