помогите мне понять, включают / требуют в PHP - PullRequest
0 голосов
/ 21 июля 2009

Я знаю разницу между include и require. И я использую require в нескольких местах в моем проекте.

Но вот в чем дело: я хочу включить файлы ОДИН РАЗ и иметь возможность вызывать его функции из других включаемых файлов.

В моем файле header.php у меня есть следующий код:

<?php 
  require_once('include/dal.php');
  require_once('include/bll.php');
  require_once('include/jquery_bll.php');
?>

Теперь в моем javascript я вызываю jquery_bll.php, используя jQuery.post, а в файле jquery_bll.php у меня есть следующий код:

$myDB = new DAL();

Моя проблема в том, что я получаю сообщение об ошибке «Класс« DAL »не найден в (..) \ jquery_bll.php».

Я снова получаю это сообщение, потому что файл вызывается из JavaScript и, следовательно, выходит за пределы "области видимости" или чего-то еще ...

Итак, есть ли способ включить необходимые файлы в header.php и не беспокоиться о повторном включении тех же файлов?

Ответы [ 2 ]

4 голосов
/ 21 июля 2009

Нужно также поставить

  require_once('include/dal.php');
  require_once('include/bll.php');

поверх вашего jquery_bll.php или включите туда полный файл заголовка.

Когда ваш JavaScript вызывает обратный вызов jquery_bll.php, это отдельный HTTP-запрос, который заставит PHP оценивать только этот файл. Поскольку этот файл не содержит вашего header.php, операторы require_once, которые обеспечивают загрузку класса DAL, не выполняются.

0 голосов
/ 21 июля 2009

Когда от клиента поступает запрос к jquery_bll.php, он называется новой страницей. Любые включения и т. Д. Из предыдущих запросов забываются. Так что да, как и было предложено, вам нужно будет снова включить необходимые «включения» в начале jquery_bll.php.

EDIT: Если вы используете PHP5, вы можете использовать его функцию autoload , которую вы можете посмотреть в папке include /, если класс еще не определен

function __autoload($class_name) {
require_once 'include/' . $class_name . '.php';

}

Хотя вам придется следить за прописными и строчными буквами и, возможно, выполнить некоторую обработку для dal против DAL и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...