У меня есть два файла, которые включены в мою страницу. Как это:
// mypage.php include 'script1.php'; include 'script2.php';
Сначала мне нужно их обоих, а затем мне нужно удалить один из них, что-то вроде этого:
if ($var == 'one') { // inactive script1.php file } else { // inactive script2.php file }
Трудно объяснить, почему мне нужно неактивно один из них, я просто хочу знать, как я могу это сделать? Можно ли сделать в отличие от include
?
Простой ответ – нет, вы не можете.
Расширенный ответ заключается в том, что при запуске PHP он делает два прохода. Первый проход компилирует PHP в машинный код. Здесь добавляются s. Второй проход – выполнить код с первого прохода. Поскольку прохождение компиляции – это то место, где было выполнено include
, нет способа удалить его во время выполнения.
Поскольку у вас есть столкновение функций, вот как обойти это, используя объекты (классы)
class Bob { public static function samename($args) { } } class Fred { public static function samename($args) { } }
Обратите внимание, что оба класса имеют samename()
но они живут в другом классе, поэтому нет столкновения. Поскольку они являются static
вы можете их так называть
Bob::samename($somearghere); Fred::samename($somearghere);
Ваш единственный вариант:
if ($var == 'one') { include('script2.php'); } else { include('script1.php'); }
вif ($var == 'one') { include('script2.php'); } else { include('script1.php'); }
вif ($var == 'one') { include('script2.php'); } else { include('script1.php'); }
Вы не можете «удалить» код, вы можете только не включать / выполнять его в первую очередь.
Как и ваши комментарии, вы сказали, что из-за дублированных имен функций я предполагаю, что вы используете оба файла в другом месте по отдельности, но теперь вы пытаетесь объединить эти файлы по другой причине (оба файла имеют функции / переменные и т. Д. что вам нужно)
Если ваш первый файл имел такую функцию my_function:
my_function() { // code here }
и ваш второй файл также имел одну и ту же именованную функцию, вы можете обернуть вокруг нее оператор if, чтобы исключить его:
if (!function_exists('my_function')) { my_function() { // code here } }
Таким образом, функция второго файла не будет доступна при объединении двух файлов вместе, но с использованием файла отдельно обе функции будут доступны.
Если вам нужен только вывод любого файла, вы можете сделать это
ob_start(); include('file1.php'); $file1 = ob_get_contents(); ob_start(); include('file2.php'); $file2 = ob_get_contents();
вob_start(); include('file1.php'); $file1 = ob_get_contents(); ob_start(); include('file2.php'); $file2 = ob_get_contents();
вob_start(); include('file1.php'); $file1 = ob_get_contents(); ob_start(); include('file2.php'); $file2 = ob_get_contents();
Затем, если вам нужно позвонить им
if ($var == 'one') { echo $file2; } else { echo $file1; }
Ради обеспечения вариантов для других, которые приходят сюда, и решения, которые я использовал сам по случаю …
Если файлы, которые вы включаете, вы включаете для некоторой функции с возвращаемым значением или некоторым исполнением, которое не нужно отображать на странице (например, для отправки почты), и, скажем, вы не можете изменять из целевых файлов (скажем, это чужой код или часть некоторого высоко интегрированного другого программного обеспечения, которое вы действительно не хотите распутывать).
Другое решение – создать спокойный интерфейс для обоих файлов, чтобы извлечь из них то, что вам нужно, а затем вызвать этот интерфейс с вашей программой, эффективно минуя необходимость их включения.