2016-07-12 4 views
0

На странице, над которой я работаю, первое, что я делаю, это включить мой файл tools.php. Скажем, index.phpВызов «требуется» внутри функции

require("../scripts/tools.php"); 

Далее, создать пользовательский CSS

$custom_css = [ 
    $link([ 
     "rel" => "stylesheet", 
     "type" => "text/css", 
     "media" => "screen", 
     "href" => BASE . "css/layout-list.css", 
     ]), 
]; 

и включают в себя элемент головки с помощью пользовательской функции требуют которая объявлена ​​внутри tools.php.

req("template/head.php"); 

Причина я использую обычай require потому, что мне нужно увеличить ../ с на каждом пути каждый раз, когда я иду глубже в структуру папок. Я не хочу добавлять их вручную.

Существует base() функции в tools.php и он автоматически вычисляет ../ s необходимо для достижения обратно в основную папку, и присваивает его постоянная BASE. Эта BASE константа используется в req() функции

function req($path) { 
    require(BASE . $path); 
} 

Это (вид) работает. Проблема состоит в том, что поскольку (фактическое) требование вызвано внутри функции, head.php не может получить доступ к $custom_css, а index.php не может получить доступ к любой переменной внутри head.php.


Решение, с которым я столкнулся, состоит в том, чтобы объявить, что переменная является глобальной, прежде чем использовать ее.

Так что, если у меня есть доступ к $custom_css, который находится в index.php от head.php, в head.php я:

global $custom_css; 
if (!isset($custom_css)) { 
    $custom_css = []; 
} 

и если у меня есть доступ к переменной, которая находится в head.php от index.php, я должен объявить переменную глобально внутри head.php:

global $head_var; 
$head_var = 4; 

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

+0

Не можете ли вы сделать что-то вроде 'require (req ('someting_here'));'? Просто верните то, что требуется, не 'require()' внутри функции. – FirstOne

+0

@FirstOne Я предполагаю, что вы прочитали ответ BeetleJuice и мой комментарий. Если нет общего решения, я, вероятно, буду использовать это. – akinuri

ответ

0

Если все ваши пользовательские req действительно является константой, определенной в tools.php, почему бы не использовать константу напрямую?

require(BASE."template/head.php"); 
+0

Первоначально, это то, что я сделал. Но мне любопытно, есть ли более общее решение. Поскольку я создал шаблон, я делаю много «requre». Использование 'req (" file.php ")' вместо 'require (BASE." File.php ")' кажется намного более чистым, но тревожным. – akinuri

Смежные вопросы