在处理命令之前检查函数内部引用的函数是否存在 - PHP

时间:2016-02-25 23:31:47

标签: php function

我通过更新函数调用来修改超过5000行代码中的大约600行代码,以匹配我为脚本使用而创建的新库。我手动更新时手动发现了一些错误,但我相信我忽略了一些。

到目前为止,我发现它们的唯一方法是运行代码并在发生错误时使其崩溃。这是一个坏主意,因为这些错误将在资源被释放之前发生。

以下是代码中解释我问题的示例:

假设我有主线代码(称为index.php),其中包含:

<?php
    include "library.php";
    $file=fopen("afile","w");
    doWrite($file);
    brokenFunction();
    fclose($file);
    exit();
?>

并说library.php只包含这个:

<?php
  function doWrite($file){
      fwrite($file,"Test");
      doNothing();
  }
?>

由于brokenFunction();doNothing();不存在,因此预计会出错。而不是PHP编译然后执行代码直到第一次失败的函数调用,如何在执行代码之前检查主线代码链接到的所有引用函数是否存在?

因此,在我的示例中,我预计会出现错误并且代码停止在$file=fopen("afile","w");处编译/执行,因为brokenFunction();doNothing();不存在。

我如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

您可以使用内置的function_exists()功能:

if (!function_exists('brokenFunction')) {
    throw new \Exception('brokenFunction is missing');
}

但这只会在执行代码时引发错误。

某些工具如PHPStorm可以check your code(不运行它)并在缺少函数时抛出警告。

此(已结束)SO问题中列出了一些其他工具:Is there a static code analyzer [like Lint] for PHP files?

答案 1 :(得分:0)

我发现全局调试环境而不使用@ A.L方法并在每个编辑行之前粘贴function_exists调用的最佳方法是使用某种类型的PHP调试器,很可能内置于IDE中,将每个函数调用行与“测试编译”进行比较。您的代码和所有包含的库,以确保被调用的函数存在(如果它没有,可能会用红色加下划线)。像Aptana这样的PHP IDE可能就是你正在寻找的东西(特别是如果你发现自己有未来的更新要运行,因为这个解决方案会有安装/设置Aptana的时间开销)。