Выполнение инструкции include

ZooY

Новичок
Выполнение инструкции include

Вопрос такой... Зависит ли выполнение include от ветвления алгоритма? Т.е. вот в таком вот коде:
PHP:
if ( условие )
     include (...);
else
     include (...);
В какой момент происходит вставка файлов, заданных в include? Если к примеру условие выполняется, ставляются данные из файла в первом инклуде, а во втором? Они тоже вставляются но не выполняются или они даже не вставляются?
Вот в таком вот коде есть ли разница между вариантами 1 и 2:

PHP:
// file1.inc.php
// -------------
function foo1 () {
     ...
}


// file2.inc.php
// -------------
function foo2 () {
     ...
}


// file.php
// --------
// Вариант 1
if ( условие ) {
     include ("file1.inc.php");
     foo1 ();
}
else {
     include ("file2.inc.php");
     foo2 ();
}


// file.php
// --------
// Вариант 2
include ("file1.inc.php");
include ("file2.inc.php");
if ( условие )
     foo1 ();
else
     foo2 ();
Стоит ли включать инклуды в условия чтобы ускорить выполнение кода?

.
 

Gorynych

Посетитель PHP-Клуба
inc1.php
======
PHP:
<?php
echo __FILE__." included";
?>
inc2.php
======
PHP:
<?php
echo __FILE__." included";
?>
test.php
PHP:
<?php
$cond = 1;
if ( $cond == 1 ) {
	include("inc1.php");
} else {
	include("inc2.php");
}

echo __FILE__." Line: ".__LINE__."<br />\n";

if ( $cond == 1 ) {
	include("inc2.php");
}
?>
 

ZooY

Новичок
Gorynych
К сожалению этот код не дает ответа на вопрос :(
Да, в первом условии печатается строка из первого инклуда, но это не говорит о том была ли вставлена строка из второго инклуда. Может она была вставлена но простоне выполнилась.

Можно конечно предположить, что если бы второй инклуд всеже вставлял содержимое своего файла, то не сработал бы инклуд во втором условии и не вывелось бы его сообщение... Но это лиш догадка...

-~{}~ 02.11.06 12:26:

Андрейка
разница в том что (по простому) один генерит страшные ошибки а другой нет, но это не дает ответа на мой вопрос
 

Андрейка

Senior pomidor developer
ZooY
очень даже может быть... пиши вместо echo в файлах
PHP:
function test1() {
   
}
а в главном после includeов
PHP:
var_dump(function_exists('test1'));
тока названия функций разные выбирай :)

-~{}~ 02.11.06 19:29:

ZooY
я вопрос в чем разница не тебе задавал )
 

ZooY

Новичок
Андрейка
Это тоже ничего не даст. var_damp просто не выполняются если условие не верно, это не дает представления об инклуде.
Даже если вынести оба function_exists за условие - это тоже ничего не даст, т.к. если объявления функции небыло, то и function_exists выдаст 0.
 

kruglov

Новичок
Сделайте в файле парсе-еррор и посмотрите, будет ли она проявляться.

-~{}~ 02.11.06 12:44:

p.s. И еще подумайте, include($a) если выполнится, то что будет? Если в этой неисполняемой ветке $a неизвестно чему равна.
 

ZooY

Новичок
kruglov
С парсе-еррором ты попал в точку! Второй инклуд не выполняется!
 

Gorynych

Посетитель PHP-Клуба
ZooY
хорошо, попробую еще раз вслед за Андрейкой: определите в inc1.php финкцию
PHP:
function func_inc1() { return; }
, а в inc2.php
PHP:
function func_inc2() { return; }
в главном файле после всего условного оператора, делающего include в зависимости от условия:
PHP:
if ( ... ) {
  ...
} else {
  ...
}

echo "func_inc1:: ";
var_dump(function_exists('func_inc1'));
echo "func_inc2:: ";
var_dump(function_exists('func_inc2'));
 

ZooY

Новичок
Gorynych
это тоже на работает, kruglov уже дал ответ, за что ему огромное спасибо!
 

Gorynych

Посетитель PHP-Клуба
не работает, видимо, мозг или способность делать выводы
 

ZooY

Новичок
Gorynych
Вариант с function_exists не подходит для проверки, потому что если написать вот так :
PHP:
if ( ... ) { 
  function func_inc1 () { return; }
} else { 
  function func_inc2 () { return; }
}
то function_exists('func_inc2') также выдаст 0.
 

Gorynych

Посетитель PHP-Клуба
ОМГ! я ж говорю - способность делать выводы не работает.
 

Shturm

Гигант мысли
ZooY
У меня вообще чувство, что вы изыскиваете возможности ускорения выполнения кода где-то не там.
 

ZooY

Новичок
Автор оригинала: Gorynych
ОМГ! я ж говорю - способность делать выводы не работает.
Поясни, пожалуйста, что ты имееш в виду, говоря, что я не способен делать выводы. Выводы из чего? Ты приводиш в прмер код, который не дает отвера на вопрос и предлагаеш делать какие-то выводы...


Автор оригинала: Shturm
У меня вообще чувство, что вы изыскиваете возможности ускорения выполнения кода где-то не там.
Я не ищу возможностей ускорения выполнения кода, я просто пытаюсь разобраться (а вернее уже разобрался) в работе include.
 

ZooY

Новичок
Michael_X
А при чем тут ответ filipchuk? Разница в require и include ничего общего не имеет к вопросу. Они идентичны за исключением генирируемых исключений. И что?
 

Андрейка

Senior pomidor developer
ZooY
логичный ты наш, объясни тада зачем нужен include, который вообще ничего не делает? в не смысле - зачем ты его написал, а в смысле внутренностей php
 

ZooY

Новичок
Андрейка
Не понимаю о чем ты. Тот или иной инклуд выполняется в зависимости от условия.
 
Сверху