快速掌握PHP检查语法错误技巧
程序员文章站
2022-04-12 15:25:27
...
错误抑制符去掉错误信息,eval和echo一样并不是函数,不能使用变量函数的方法调用比如:
$func = ‘eval’
$func()这样的调用就是无效的。它会提示没有eval函数,如果你自己定义这么一个函数也是有问题的。因为eval是一个关键字。
eval调用和include差不多,如果被包含文件中没有明确return就返回null。如果直接eval我们需要检查的文件会造成被检查的文件内代码被执行,这可不是我们想要的,我们只需要检查一下这个文件的语法是否正确。 我们可以在要检查的文件之前添加return 语句,让代码提前跳出,那么后面的代码就不会执行了。好的,就这么干。代码如下:
- ?PHP
- if(!function_exists('PHP_check_syntax')) {
- function PHP_check_syntax($file_name,
&$error_message = null) {- $file_content = file_get_contents($file_name);
- $check_code = "return true; ?>";
- $file_content = $check_code .
$file_content . " ?PHP ";- if(!@eval($file_content)) {
- $error_message = "file: " .
realpath($file_name) . " have syntax error";- return false;
- }
- return true;
- }
- }
- if(!PHP_check_syntax("file.PHP", $msg)) {
- echo $msg;
- }
- else {
- echo "Woohoo, OK!";
- }
- ?PHP
- foreach:: a => b
- ?>
因为Parse error 是没法被 set_error_handler处理函数处理的。这个异常没办法catch到。所以才使用了@来抑制错误。这带来的问题就是我们无法得到详细的错误信息。 不过目前我需要的功能也只是检查语法是否正确。不正确的话重新编译模板文件,就这么简单,至于语法错误,在显示网页的时候自然会看得到。
PHP检查语法错误最好的办法就是这个被遗弃的PHP_check_syntax这个方法回到PHP中。下次再研究下他们是出于什么原因把这个函数去掉的。