【问题标题】:How to include a specific function using require_once() or include() functions in PHP?如何在 PHP 中使用 require_once() 或 include() 函数包含特定函数?
【发布时间】:2018-01-06 21:46:56
【问题描述】:

如何根据需要从包含各种函数定义的 php 文件中包含特定函数。

例如。
PHP 文件 functions.php 包含 3 个函数 a()、b() 和 c()
我必须在 other.php 文件中使用 require_once('/f/functions.php') 才能使用函数 c。

我该怎么做才能使用 require_once() 函数仅在文件 other.php 文件中包含函数 c 并避免不包含其他函数?

【问题讨论】:

  • 如果包含其他功能(a & b)会有什么问题?
  • 没问题,我只是想避免包含目前不需要的不必要的功能。
  • @xyz 没有内置的方法可以做到这一点。任何 hack 都会比仅仅包含函数产生更高的开销。
  • 在我看来,更好的方法是使用命名空间和类来构建代码。将函数分组到相关类并使用自动加载来加载您需要的类。

标签: php


【解决方案1】:

你不能,句号。 PHP 没有任何类型的模块系统。要“包含函数”,您所能做的就是执行一个源代码文件(include 将执行的操作),该文件将通过执行文件中的代码定义这些附加函数或文件中的任何其他内容。您不能选择性地只选择要运行的代码的某些部分。

【讨论】:

  • 不完全正确。可以手动解析文件,将函数提取为文本,然后通过eval 运行它。虽然强烈不推荐(请不要),但它是可行的。
  • @deceze 同意。 :)
  • @deceze 这不是codereview
  • @Kaspars 到底是什么意思?
【解决方案2】:

没有内置的方法可以做到这一点。虽然如果你为这项运动而做,有办法绕过它。

虽然强烈不推荐。真的,只是不要这样做......方法如下:

1) 以文本形式读取文件。

2) 找到功能块并提取它

3) 通过eval 运行它。

这将导致文件中设置的任何全局状态都无法运行。您可能想要也可能不想要。

SuperClosure 做了类似的事情来序列化闭包,默认情况下 php 不支持。

您还可以利用PHP7 abstract syntax tree 来包含相关功能。例如,如果定义了三个函数 - ABCA 在内部使用 B。如果您包含A,您还需要包含B

这不会比只包含整个文件更高效,但请随时用基准证明我错了。


您可能对namespaces 感兴趣。类和函数都支持它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2018-09-12
    • 2011-12-16
    • 2013-06-12
    • 2017-03-12
    • 2011-02-06
    • 2015-06-01
    相关资源
    最近更新 更多