2016-06-04 5 views
-1

Я знаю, что есть много вопросов, связанных с этим, и я пробовал решения для своей ситуации, но никто из них не работал. Мне нужно изменить API, созданный с помощью FlightPHP Framework (уже написанный). Существует более 100 функций, и большинство из них используют некоторые статические переменные. Я пытаюсь объявить их на одной странице, так что если их значение нужно изменить в один прекрасный день, я могу сделать это легко, изменив его только в одном месте.Неспособность включить файлы в PHP

Это структура каталогов.

index.php 
constants.php 
FOLDER 
    - firstInnerPage.php 
    - secondInnerPage.php 

Я приведу образец каждой страницы.

constants.php

<?php 
$member_default_cover ='img/members/member-default.jpg'; 
$member_default_avatar ='img/members/member-default.jpg'; 
?> 

Эти константы, которые я хочу использовать в каждой функции.

index.php

<?php 
require 'flight/Flight.php'; 

//Route to index page function 
Flight::route('/indexPageFunction', function() 
{ 
    pages_included();  
    $returnarray=indexPageFunction(); 
    header('Content-type:application/json;charset=utf-8'); 
    echo json_encode($returnarray); 
}); 

//Route to first page function 
Flight::route('/firstInnerPageFunction', function() 
{ 
    pages_included();  
    $returnarray=firstInnerPageFunction(); 
    header('Content-type:application/json;charset=utf-8'); 
    echo json_encode($returnarray); 
}); 

//Route to second page function 
Flight::route('/secondInnerPageFunction', function() 
{ 
    pages_included();  
    $returnarray=secondInnerPage(); 
    header('Content-type:application/json;charset=utf-8'); 
    echo json_encode($returnarray); 
}); 

Flight::start(); 

//Calling this function includes the inner page and makes them accessible 
function pages_included() 
{ 
    require_once 'FOLDER/firstInnerPage.php'; 
    require_once 'FOLDER/secondInnerPage.php'; 
} 

//Index page function 
function indexPageFunction() 
{ 
require_once 'constants.php'; 
$avatar = $member_default_avatar; 
} 

?> 

Для функции страницы индекса, файл получает включен. Когда пользователь помещает запрос, он сначала достигает маршрутов, от которых запрос перенаправляется на правильную функцию. Но внутренние страницы имеют свою собственную функцию. Они написаны на отдельных страницах для категоризации функций. И эти страницы включены в маршрут, поэтому, когда приходит запрос на функцию внутренней страницы, эти файлы включаются. pages_included() выполняет работу по включению внутренних страниц.

Как выглядит внутренняя страница.

firstInnerPage.php

<?php 
function firstInnerPageFunction() 
{ 
require_once 'constants.php'; 
//require_once '../constants.php'; 
$avatar = $member_default_avatar; 
} 
?> 

Вторая внутренняя страница также похожи, поэтому, я не включая его здесь.

Я попытался включить этот файл в обоих направлениях: 1) require_once 'constants.php'; 2) require_once '../constants.php';

но оба потерпели неудачу. Я либо не могу включить ошибку файла, либо не указан переменная $member_default_avatar ошибка.

Может ли кто-нибудь сказать мне, какой правильный метод включить файл в таких ситуациях? Благодарю вас.

+0

Я думаю, что 'require_once ('../ constants.php');' должен работать, но только если 'constants.php' работает правильно. Кроме того, я бы не включил другой php-файл внутри функции, он просто выглядит не так. Используйте OOP (объекты) для выделения переменных или поместите свои статические переменные в массив и используйте 'global ' внутри функции для доступа к этому массиву. –

+0

Вы включаете константы в эту функцию, также indexPageFunction() вы изменили ее, чтобы потребовать «../constants.php» –

+0

No..in indexPageFunction(), я использую ее как require_once 'constants.php'; и на внутренних страницах как require_once '../constants.php'; @v Sugumar – Annabelle

ответ

1

Как я уже сказал в своем комментарии, я не люблю включать php-файлы внутри функций. Файлы PHP всегда должны иметь глобальную область видимости (если вы не используете пространства имен), попробуйте сделать это простым.

Итак, вот пример кода:

contants.inc

<?php 

$myStaticVars = ['member_default_cover' => 'img/members/member-default.jpg', 
       'member_default_avatar' => 'img/members/member-default.jpg']; 

firstInnerPage.PHP

<?php 

require_once('../constants.inc'); 

function firstInnerPageFunction() 
{ 
    global $myStaticVars; 
    extract($myStaticVars); // make static vars local 
    $avatar = $member_default_avatar; 
} 

Таким образом, вы также уверены, что статические переменные всегда доступны, потому что если вы используете require_once на тот же файл в различных вызовы функции она будет работать только для первой функции вы звоните.

Вместо массива вы также можете использовать define(), если ваши статические переменные действительно постоянны. Преимущество состоит в том, что константы доступны повсюду, а также внутри функций.