2016-09-21 3 views
0

Мне было интересно это некоторое время, и я еще не видел ответа в SE.избегать дублирования php include/require

При использовании в php мое рабочее понимание заключается в том, что любой код в комплекте будет обработан сервером.

Это будет означать, что в следующем условном случае оба больших блока кода обрабатываются на сервере, хотя только один из них включает РАБОТУ.

<?php 
if($conditional === TRUE){ 
    include("MASSIVEAMOUNTOFCODE.php"); 
} 
else { 
    include("GARGANTUANAMOUNTOFCODE.php"); 
} 
?> 

(Пожалуйста, простите за сильно упрощенный код здесь.)

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

<?php 
if($conditional === TRUE){ 
    $includeFile = "MASSIVEAMOUNTOFCODE.php"; 
} 
else { 
    $includeFile = "GARGANTUANAMOUNTOFCODE.php"; 
} 

include("$includeFile"); 
?> 

Примечание двойное использование «включает» в первом образце, и только одно использование " включают «во второй выборке».

+0

Я думаю, что ваше оригинальное помещение ошибочно. Он обрабатывает только одну из строк 'include'. – Barmar

+0

Включение кода, как правило, довольно хорошо переносится прекомпилером и байтом-байтом. поэтому использование более простой «include-structure» должно быть лучшим выбором. время исполнения включенной части, очевидно, является только вопросом, если он фактически выполнен. так что, как чувство кишки, я придерживаюсь первого пути, но даже больше, я бы попытался структурировать свой код таким образом, что мне не обязательно условно включать в первую очередь. –

ответ

2

Исходное предположение, что оба файла обработаны неправильно. Оператор include внутри блока кода, который никогда не выполняется, игнорируется.

Вы можете видеть, что это верно, поставив синтаксическую ошибку в include-файле в незавершенной ветке. Я сделал:

testinclude.php:

<?php 
if (false) 
    include 'badinclude.php'; 

echo "done\n"; 

badlinclude.php:

<?php 

$foo =; 

Когда я выполнил testinclude.php не было никаких жалоб о синтаксической ошибке в badlinclude.php.Но если я изменю if (false) до if (true), я получаю сообщение об ошибке.

Parse error: syntax error, unexpected ';' in /Users/barmar/badinclude.php on line 3

Таким образом, две версии вашего кода должны быть эквивалентными.

+0

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

+0

Как он может скомпилировать что-то с синтаксической ошибкой? – Barmar

+0

Я вернулся к предположению о синтаксической ошибке. – Parapluie

-1

Ваше предположение неверно.

Что такое include, так это то, что когда функция называется, она загрузит файл в виде нового файла PHP в том же окружении, в котором он был вызван.

Пример:

test.php:

<?php $test = 'test'; include('test2.php'); ?> 

test2.php:

<?php echo $test; ?> 

Это Выведет:

test 

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

Если вы хотите, чтобы файл был включен только один раз или даже потребовал его загрузки один раз, используйте include_once или require_once.

Смежные вопросы