如何删除包含文件?

问题描述 投票:0回答:6

我的页面中包含两个文件。像这样:

// mypage.php
include 'script1.php';
include 'script2.php';

我首先需要它们两个,然后我需要删除其中一个,如下所示:

if ($var == 'one') {
      // inactive script1.php file
} else {
     // inactive script2.php file
}

这很难解释为什么我需要停用其中一个,我只是想知道,我该怎么做?可以做不像

include
吗?

php include
6个回答
6
投票

简单的答案是否定的,你不能。

扩展的答案是,当您运行 PHP 时,它会进行两次传递。第一遍将 PHP 编译为机器代码。这是添加

include
的地方。第二遍是执行第一遍中的代码。由于编译阶段是完成
include
的地方,因此无法在运行时删除它。

由于您遇到了函数冲突,因此以下是如何使用对象(类)来解决该问题

class Bob {
    public static function samename($args) {

   }
}
class Fred {
   public static function samename($args) {

   }
}

请注意,两个类都有

samename()
函数,但它们位于不同的类中,因此不会发生冲突。因为他们是
static
你可以这样称呼他们

Bob::samename($somearghere);
Fred::samename($somearghere);

2
投票

如果您只需要任一文件的输出,您可以这样做

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;
}

0
投票

你唯一的选择是这样的:

if ($var == 'one') {
      include('script2.php');
} else {
     include('script1.php');
}

您无法“删除”代码,您只能选择首先不包含/执行它。


0
投票

根据您的评论,您说这是因为函数名称重复,我假设您在其他地方分别使用这两个文件,但是您现在想要实现的目标是出于不同的原因将这些文件合并在一起(两个文件都有函数/变量,等您需要的)

如果你的第一个文件有一个像 my_function 这样的函数:

my_function() {
    // code here
}

并且您的第二个文件也具有相同的命名函数,您可以在其周围包含 if 语句以排除它:

if (!function_exists('my_function')) {
    my_function() {
        // code here
    }
}

这样,当两个文件合并在一起时,第二个文件的功能将不可用,但单独使用文件时,两个功能都可用。


0
投票

为了给来这里的其他人提供选择,我自己有时也使用过一些解决方案......

  1. 如果您包含的文件,您包含的是某些带有返回值的函数或某些不需要在页面上显示的执行(例如邮寄东西),那么我们可以说您不能 更改任一目标文件(假设它们是其他人的代码或您真的不想解开的某些高度集成的其他软件的一部分)。

一个解决方案是为两个文件创建一个快速而肮脏的静态接口,以便从它们中提取您需要的内容,然后使用您的程序调用该接口,从而有效地绕过包含它们的需要。

  1. 这是一种更糟糕的方法,但如果您的情况确实非常绝望,并且确实是最后的手段,并且仅在某些情况下有效(例如,会在命名空间上中断)...

    $bad_idea = file_get_contents("foo.php");

    评估($bad_idea);

    取消设置($bad_idea);

再次注意,这是最后的选择。


0
投票

虽然这个线程很旧,但以下代码可能会帮助那些只想从 php 脚本文件加载变量的人。

我将其用于本地流程:

// mypage.php
$file_to_include_1 = 'script1.php';
$file_to_include_2 = 'script2.php';

/**
 * For simplicity, read file content without 
 * any file existance check
 */
$file_1_content = file_get_contents($file_to_include_1);
$file_2_content = file_get_contents($file_to_include_2);

/**
 * Evaluate each file content to recognized as php-variables 
 */
eval($file_1_content);
eval($file_2_content);

if (isset($var) && $var == 'one') {
  /**
   * To deactivate script1.php file unset unnecessary variables, eg.
   */
  unset($var_in_script_1);
  unset($other_var_in_script_1);
} else {
  /**
   * To deactivate script2.php file unset unnecessary variables, eg.
   */
  unset($var_in_script_2);
  unset($other_var_in_script_2);
}
© www.soinside.com 2019 - 2024. All rights reserved.