我可以在PHP函数或方法中包含代码吗?

时间:2009-12-24 08:01:38

标签: php

我想制作一种“通用”函数,它可以执行,并且 - 取决于要做什么 - 通过include()包含它的实现文件。因此,例如,我可能只有一个函数和该函数的20个过程文件。过程文件可能看起来像do_this_procedure.php,do_that_procedure.php等。

由于我是PHP的新手,我想从PHP专家那里了解这对PHP是否合适,在我尝试它之前只“相信”它有效,并且实际上很多事情都出错了。所以你怎么看?目前我认为包含就像在编译执行之前将代码插入到该位置一样。

5 个答案:

答案 0 :(得分:7)

来自include声明文档:

  

如果include发生在调用文件中的函数内部,则调用文件中包含的所有代码都将表现为已在该函数内定义。因此,它将遵循该函数的可变范围。此规则的一个例外是魔术常量,在包含发生之前由解析器评估。

所以是的,您可以在函数中调用include并使用它来定义函数体。您甚至可以让每个调用该函数的文件都有所不同。缺点是每次调用函数时都会评估include;如果多次调用该函数,可能会严重影响性能。

根据您要完成的内容,另一种方法是遵循函数式编程范例,该范例允许您在运行时construct functions。在PHP 5.3之前,它很难看,所以除非你至少需要PHP 5.3,否则我不会推荐它。

答案 1 :(得分:2)

你也可以试试这个:

PHP Tokenizer.

//from external script:

<?php
  var_dump(token_get_all(file_get_contents('myscript.php')));
?>

答案 2 :(得分:1)

我相信包含这样的文件将在运行时完成。基本上,当PHP命中include / require函数时,它会将该文件作为一个独立的文件进行评估。

我不确定传递给函数的变量是否可以在包含的文件中使用,但全局化它们应该可以正常工作。

答案 3 :(得分:1)

@outis击中头部,但另一种方法是在类中创建函数作为静态方法并创建自动加载器(通过spl_autoload_register等)来包含和调用类运行时的方法。

然后,除非你已经使用OO方法,否则这真的不会给你带来任何好处。

答案 4 :(得分:0)

outis 是正确的,但是这对我来说是一种非常难看和混乱的方式来实现代码。为什么不只是让不同的文件具有函数的不同声明,包括函数声明

函数应尽可能短 - 作为一般经验法则,我将回过头来看看重构超过20行的任何函数是否切实可行。记住这一点,从单独的文件中包含函数体的好处在哪里?

下进行。