如何检查php文件中的未定义函数?

时间:2012-03-29 07:33:47

标签: php

调用php -l检查php文件的语法。

有没有办法检查未定义的函数? 我不需要它使用在运行时定义的函数,也不需要使用动态调用

显然无法调用文件:我需要检查整个文件,而不仅仅是检查执行的分支。见下面的例子。

myfile.php:

function imhere () {}

main.php:

require_once 'myfile.php';

if (true) {
    imhere();
}
else {
    imnhothere(); // I need to get a warning about this
}

3 个答案:

答案 0 :(得分:2)

动态语言无法检查未定义的函数。考虑到未定义的函数可以通过多种方式表现出来:

undefined();
array_filter('undefined', $array);
$prefix = 'un'; $f = $prefix.'defined'; $f();

除此之外,可能存在有条件地使用和定义的功能(通过包含或其他方式)。在最坏的情况下,请考虑以下情况:

if(time() & 1) {
    function foo() {}
}

foo();

上述程序是否调用未定义的函数?

答案 1 :(得分:0)

检查语法只需要扫描php文件的当前内容,但是检查函数是否定义是不同的,因为函数可以在所需的文件中定义。

最简单的方法就是执行文件,未定义的函数会给你一个PHP Fatal error: Call to undefined function ....

或者您可能需要this

答案 2 :(得分:0)

在评论网球之后,我想我会把一些想法结合到一个答案中。

您可能需要的是一些更高级别的测试(集成或Web测试)。通过这些,您可以测试完整的模块或整个应用程序以及它们如何挂在一起。通过使用相关的包含语句对整个页面或类组运行测试,这将帮助您隔离对未定义函数以及许多其他事物的调用。您可以使用PHPunit进行集成测试(以及单元测试),尽管我不确定此时会获得那么多。

最好是调查网络测试。您可以使用许多工具(这绝不是一个完整的列表):

  • Selenium我认为可以挂钩到PHPUnit
  • SimpleTest,不确定维护得多好,但我过去用它来进行简单的(!)测试
  • behat,它使用Gherkin实现BDD,但我知道它可用于进行网络测试(behat with Goutte