Как php и собственные фреймворки работают в фоновом режиме? - PullRequest
1 голос
/ 27 апреля 2010

Я новичок в веб-программировании. Я хорош на платформе c # .net на рабочем столе. я пытался понять php и php фреймворки, но я немного запутался. я понимаю, что файл php может импортировать классы, которые находятся в файле, в другой файл php с функцией require_once. но фреймворки не импортируют его собственные классы с функцией require_once. я думаю, что они делают что-то другое, что я не понимаю. Может кто-нибудь объяснить мне, пожалуйста?

1 Ответ

2 голосов
/ 27 апреля 2010

Большинство фреймворков использует технику, называемую «Автозагрузка», для автоматического разрешения и включения необходимых зависимостей.

«Автозагрузчик» - это просто функция, которая вызывается PHP при обращении к неизвестному классу. Этот «автозагрузчик» может либо процедурно создать класс, либо просто include из внешнего файла на основе имени файла.

Текущий (PHP 5.1.2 и выше) правильный способ сделать это - использовать spl_autoload_register(). Вот пример автозагрузчика:

function autoload_example($className) {
  $normalizedName = strtolower($className);

  if(file_exists('includes/' . $normalizedName . '.inc')) {
    require_once('includes/' . $normalizedName . '.inc');
  } elseif(file_exists('includes/' . $normalizedName . '.inc')) {
    require_once('includes/' . $normalizedName . '.php');
  } else {
    die('Class ' . $className . ' not found');
  }
}

spl_autoload_register('autoload_example');

$myAwesomeObject = new Awesome();

В приведенном выше примере PHP запустит «Автозагрузчик» autoload_example, когда ударит ссылку на класс Awesome.

«Автозагрузчик» сначала попытается найти файл include/awesome.inc. Если он может найти его, он включит его.

Если нет, он будет искать файл с именем include/awesome.php. Если он может найти его, он включит его.

Если нет, то die() сообщит, что не может найти мой Awesome класс.

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