Шаблон, который я часто использую в PHP, устанавливает несколько глобальных переменных (например, $page
, $user
, $db
и т. Д.), А затем включает файл, который использует эти глобальные переменные. Мне никогда не нравилась идея использовать глобальные переменные для этого, поэтому я ищу лучший способ.
Очевидным решением является определение класса или функции в подфайле и вызов его после включения файла. Есть случаи, когда это не может работать, например, это:
// Add entries to a URI table from each section of the site
global $router;
$router = new VirtualFileSystem();
$sections = array('store', 'forum', 'blog');
foreach($sections as $section)
include dirname(__FILE__) . $section . '/routing.php';
// Example contents of 'forum/routing.php'
// implicitly receive $router from caller
$router->add('fourm/topic/', 'topic.php');
$router->add('forum/topic/new/', 'new_topic.php');
// etc
Если бы я попытался обернуть каждый routing.php
в функцию и вызвать их каждый с $router
в качестве аргумента, то одно и то же имя функции могло бы конфликтовать после определения в нескольких файлах.
У меня нет идей. Есть ли лучший способ передачи переменных во включаемые файлы без загрязнения глобального пространства имен?