【问题标题】:PHP: 'include', but don't runPHP:'包括',但不运行
【发布时间】:2015-11-02 19:18:52
【问题描述】:

我有一个 test.php,我在其中运行单元测试用例。我想要的是'include' 某些 .php 文件,但是当我这样做时,它们会运行。例如,我只需要从 .php 文件访问某些变量、函数,但整个 .php 文件会运行。就我而言, .php 是一个巨大的文件。 'require' 也发生了同样的事情。

是否可以在不运行这些 .php 方法、变量、函数的情况下访问它们?

谢谢!

【问题讨论】:

  • 在一个脚本(页面)中创建函数,然后将它们包含在要运行它们的页面中。听起来您所包含的页面已经调用了其中的函数。如果您发布一个示例,我们可能会更具体。
  • 把它们放在一个类中,如果需要的话从那里运行它们(例如$class->myfunction())。
  • 听起来像是一个计划。应该猜到了。我将创建一个带有函数的新 .php 文件。谢谢大家。

标签: php include


【解决方案1】:

当包含代码时会发生这种情况,它作为整个脚本的一部分执行。您不会通过一些包含代码而不执行它的黑客来“解决这个问题”。您可以通过将代码组织成可调用的单元来修复它。

事实上,单元测试是一种伟大开始思考如何组织代码的方式。你到底在测试什么?一类?一个函数?或者只是某个脚本中某个随机的顶级代码块?

如果是后者,您现在就看到了问题。通过包含该代码,您可以执行它。这超出了正在运行的测试的上下文。相反,您希望该代码位于某种可调用单元中。一个类,或者至少是一个函数。

例如,假设您有一个 PHP 文件,其中包含执行各种任务的顶级代码。正如您所体验的那样,当您包含该代码时,所有这些任务都会立即执行。但是,如果您将该文件中的代码组织成一组函数,那么通过包含它您所做的只是定义函数。然后,使用代码(在本例中为单元测试)可以根据需要以受控和可预测的方式执行这些功能。

当你包含它时,所有代码应该做的是定义结构。然后顶级消费代码应该使用这些结构。将所有逻辑都放入顶级代码中使其无法测试和管理。

【讨论】:

  • 正如你所说,'你所做的只是定义函数'。但这些函数的调用将来自其他 .php 文件。我对么?如果是,那么我将重构代码。感谢大卫的精彩回答。
  • @joojoo:正确。当您包含该文件时,它会被执行。但是,如果该文件所做的只是定义代码结构(类和函数),那么执行它不会有任何副作用。
【解决方案2】:

我得到了帮助。我要做的是创建一个新的 .php 文件,其中将包含我要测试的那些必需的函数和方法。

更新:似乎我需要重构我的代码,以便从其他 .php 文件中调用所需的函数和类。这样我就“包含”了我想要的东西,而不会被执行。

谢谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多