【问题标题】:reverse function of require/include需求/包含的反向功能
【发布时间】:2013-12-24 08:40:25
【问题描述】:

是否有任何函数可以恢复 require/require_once/include/include_once?

例如,在脚本 A 中,我需要一个脚本 B,它具有与其他脚本 C 相同的功能,我不知道以前是否需要 C。所以我想在加载 B 之前从内存中“清理”脚本 C 以防止重复的功能。

【问题讨论】:

  • 不,不,不,但您可以覆盖之前定义的功能。
  • 您是在文件中定义的唯一函数吗?您可以在每个包含函数的文件中定义一个类。就像一个带有静态方法的辅助类。
  • 哇,这也是个好主意,谢谢

标签: php


【解决方案1】:

你不能——也不应该那样做。请改用require_once - 这样的操作是安全的。请注意,包含后您的上下文将被更改 - 因此无法应用“反转”它。

如果您想覆盖某些功能 - 您始终可以这样做,它会正常工作。你应该在声明之前检查一下:

【讨论】:

  • require_once 会加载 C,我会完成重复的函数,不是吗?
  • require_once 将安全地包含一个文件(即不允许重复)。但是,要覆盖某些功能 - 使用 require_once 将是一个好主意,因为您将确保不会重新定义一些先前声明的东西
  • 不知道,我认为它只是检查了同一个文件是否不包括在内。谢谢
  • 如果在两个不同的文件中定义了相同的函数,require_once 仍然允许重复,在这个问题中似乎不是这种情况。 function_exists 可以添加到此以巩固此解决方案。
  • ty Hanky Panky 进行澄清
【解决方案2】:

我不知道。

老实说,我的建议(假设您正在“清理”一些代码)是将脚本 B 和脚本 C 的常用功能抽象到另一个脚本 D 中,并在脚本 B 和 C 中使用 require_once/include_once。

【讨论】:

    【解决方案3】:

    这不是它的工作原理。但是,您可以使用以下方法防止函数库发生函数命名冲突:

    if (!function_exists('myfunction')) {
        function myfunction($param) {
            // ...
        }
    }
    

    也就是说,如果你还没有在任何地方使用 require_once / include_once(你应该)。

    【讨论】:

    • 请注意,B 和 C 是不同的,但有一些函数名称相同。 require_once/include_once 会同时加载两者。顺便说一句,我喜欢你的解决方案,谢谢
    【解决方案4】:

    您可以为文件命名以防止冲突:

    <?php
    
    namespace Foo {
        function test() {
            return __NAMESPACE__ . '::' . __FUNCTION__;
        }
    }
    
    namespace Bar {
        function test() {
            return __NAMESPACE__ . '::' . __FUNCTION__;
        }
    }
    
    namespace Baz {
      var_dump(array(
          \Foo\test(),
          \Bar\test(),    
      ));
    }
    

    https://eval.in/82425

    【讨论】:

      猜你喜欢
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2013-10-02
      相关资源
      最近更新 更多