快速掌握PHP检查语法错误技巧

原创
2016-06-13 11:11:09 1112浏览

错误抑制符去掉错误信息,eval和echo一样并不是函数,不能使用变量函数的方法调用比如:

$func = ‘eval’

$func()这样的调用就是无效的。它会提示没有eval函数,如果你自己定义这么一个函数也是有问题的。因为eval是一个关键字。
eval调用和include差不多,如果被包含文件中没有明确return就返回null。如果直接eval我们需要检查的文件会造成被检查的文件内代码被执行,这可不是我们想要的,我们只需要检查一下这个文件的语法是否正确。 我们可以在要检查的文件之前添加return 语句,让代码提前跳出,那么后面的代码就不会执行了。好的,就这么干。代码如下:

  1. ?PHP
  2. if(!function_exists('PHP_check_syntax')) {
  3. function PHP_check_syntax($file_name,
    &$
    error_message = null) {
  4. $file_content = file_get_contents($file_name);
  5. $check_code = "return true; ?>";
  6. $file_content = $check_code .
    $file_content . "
    ?PHP ";
  7. if(!@eval($file_content)) {
  8. $error_message = "file: " .
    realpath($file_name) . " have syntax error";
  9. return false;
  10. }
  11. return true;
  12. }
  13. }
  14. if(!PHP_check_syntax("file.PHP", $msg)) {
  15. echo $msg;
  16. }
  17. else {
  18. echo "Woohoo, OK!";
  19. }
  20. ?PHP
  21. foreach:: a => b
  22. ?>

因为Parse error 是没法被 set_error_handler处理函数处理的。这个异常没办法catch到。所以才使用了@来抑制错误。这带来的问题就是我们无法得到详细的错误信息。 不过目前我需要的功能也只是检查语法是否正确。不正确的话重新编译模板文件,就这么简单,至于语法错误,在显示网页的时候自然会看得到。

PHP检查语法错误最好的办法就是这个被遗弃的PHP_check_syntax这个方法回到PHP中。下次再研究下他们是出于什么原因把这个函数去掉的。


声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。