Требуется ли PHP, require_once или include для автоматического чтения файла при загрузке страницы? - PullRequest
2 голосов
/ 13 марта 2011

У меня есть несколько страниц, которые используют языковые конструкции include или require в PHP. Многие из них лежат в IF, ELSE заявлениях.

Я понимаю, что страница вообще не будет загружаться, если файл require'd отсутствует, но основная цель включения этого способа заключается в следующем:

1) уменьшить помехи кода на странице

2) не загружать файл, если не выполнено заявление.

Загружает ли файл оператор include или require файл (тем самым исключая преимущества, которые я пытался достичь, помещая в оператор if / else?

Краткий пример:

<?php


$i = 1

if($i ==1) {

      require_once('somefile.php');

} else {

     require_once('otherfile.php');
}

?>

При загрузке страницы проверяются и загружаются ли оба файла?

Ответы [ 4 ]

8 голосов
/ 13 марта 2011

Если вы поместите оператор include / require в тело if (или else) , он будет выполнен, если условие if правда.

if ($a == 10) {
    // your_first_file.php will only be loaded if $a == 10
    require 'your_first_file.php';
} else {
    // your_second_file.php will only be loaded if $a != 10
    require 'your_second_file.php';
}


И, если вы хотите, вы можете проверить это довольно легко.
Это первый пример:

if (true) {
    require 'file_that_doesnt_exist';
}

получит вас:

Warning: require(file_that_doesnt_exist) [function.require]: failed to open stream: No such file or directory
Fatal error: require() [function.require]: Failed opening required 'file_that_doesnt_exist'

т.е. require выполняется - и завершается неудачей, поскольку файл не существует.


Пока это второй пример:

if (false) {
    require 'file_that_doesnt_exist';
}

Вы не получите никакой ошибки: require не выполняется.

4 голосов
/ 13 марта 2011

При загрузке страницы проверяются и загружаются ли оба файла?

Нет, по крайней мере, с тех пор (IIRC) PHP 4.0.1.

Если вы хотитеЕсли вы работаете с в основном объектно-ориентированным кодом, взгляните также на автозагрузку PHP .

2 голосов
/ 13 марта 2011

Конструкции include и require оцениваются только при прохождении. Файлы читаются только тогда, когда ваше выражение встречается.

Это легко объяснить, учитывая, что конструкции могут содержать переменные:

require_once("otherfile-{$i}.php");

Это поддерживается. Но это может не сработать до того, как PHP запустит эту конкретную строку, потому что ему нужно знать состояние $i, чтобы загрузить нужный файл.

2 голосов
/ 13 марта 2011

Нет, только один из этих файлов будет загружен.

...