2017-02-08 6 views
0

Я разработал пользовательскую функцию включения для моего приложения, которая должна была сделать мою жизнь намного легче, за исключением того, что она полностью противоположна и привела к тому, что я отлаживал одни и те же ошибки в течение нескольких часов, пока этот ламповый момент не понял, что это было.PHP, Custom include function - как мне сделать доступными все другие функции и переменные?

Поскольку файлы включены в функцию, переменные, функции и т. Д. Внутри файла не являются глобальными.

Есть ли способ, которым я могу заставить его работать, или это все упражнение бессмысленно?

См. Ниже код.

function import($a,$b = 1) { 
    global $options; 

     if($b == 1) $folder = "internal_functions"; 
     elseif($b == 2) $folder = "external_functions"; 
     else $folder = $b; 

     $file_path = $options['LIB_DIR']."/".$folder."/".$a.".php"; 

     if(@!file_exists($file_path)) { 

      $_criticalFiles = array("sessionService/session_loader", "databaseService/db_connection","userService/isLoggedIn"); 

      if(in_array($a,$_criticalFiles)) { 
       die("<center><h1>Critical Error.<br />Could not find {$a}.</h1></center>"); 
      } 

     } else { 
      require_once($file_path); 
     } 
    } 

Благодаря

+0

можете ли вы добавить что-то внутри '$ a.php'? –

+0

'$ a.php' - это имя переменной для файла, а' $ b' - это имя переменной для папки – DLipscombe

ответ

0

Для тех из вас, кто интересуется, как я обошел это, я этого не сделал.

Вместо этого я положил все файлы в массиве, такие как

$filesInclude = array("file1","file2","file3","etc"); 

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

0

Это проблема scope. Любые переменные, созданные в функции, которую вы хотите получить вне ее, должны быть равны global.

+0

. Я понимаю это, но есть ли способ сделать это как метод с двумя птицами 1 камень или у меня будет для инициализации каждой отдельной переменной? – DLipscombe

+0

Измельченный узел - вам придется делать каждый, и это не заботится о каких-либо функциях, определенных во внешнем файле. Хм .... [namespaces] (http://php.net/manual/en/language.namespaces.php) * может * что-то сделать для вас, я не уверен, мне пришлось бы с этим поиграть , и уже поздно, и я устал. Проверьте это. – alanlittle

+0

Оцените помощь - просто вырежьте все это и бросьте то, что было в функции импорта ($ a, $ b), в цикл for и поместите его в массив. :) – DLipscombe