エラー サプレッサーは、echo と同様に、関数ではないため、変数関数メソッドを使用して呼び出すことはできません。たとえば、
$func = 'eval'
$func() などの呼び出しは無効です。 。そのような関数を自分で定義すると、問題が発生する可能性があります。 eval がキーワードだからです。
eval 呼び出しは include と似ています。インクルードされたファイルに明示的な戻りがない場合は、null が返されます。チェックする必要があるファイルを直接評価すると、チェックされたファイル内のコードが実行されます。これは、ファイルの構文が正しいかどうかをチェックするだけで済みます。 チェックするファイルの前に return ステートメントを追加して、コードを事前に飛び出して、後続のコードが実行されないようにすることができます。はい、それだけです。コードは次のとおりです。
<ol class="dp-xml"> <li class="alt"> <span class="tag"><</span> ?PHP </li><li><span>if(!function_exists('</span>PHP<span>_check_syntax')) { </span></li><li class="alt"><span>function </span>PHP<span>_check_syntax($file_name, <br />&$</span><span class="attribute">error_message</span><span> = </span><span class="attribute-value">null</span><span>) { </span></li><li><span>$</span><span class="attribute">file_content</span><span> = </span><span class="attribute-value">file_get_contents</span><span>($file_name); </span></li><li class="alt"><span>$</span><span class="attribute">check_code</span><span> = </span><span class="attribute-value">"return true; ?>"</span><span>; </span> </li> <li> <span>$</span><span class="attribute">file_content</span><span> = $check_code . <br>$file_content . "</span><span class="tag"><</span><span> ?</span>PHP<span> "; </span></li><li class="alt"><span>if(!@eval($file_content)) { </span></li><li><span>$</span><span class="attribute">error_message</span><span> = </span><span class="attribute-value">"file: "</span><span> . <br />realpath($file_name) . " have syntax error"; </span></li><li class="alt"><span>return false; </span></li><li><span>} </span></li><li class="alt"><span>return true; </span></li><li><span>} </span></li><li class="alt"><span>} </span></li><li><span>if(!</span>PHP<span>_check_syntax("file.</span>PHP<span>", $msg)) { </span></li><li class="alt"><span>echo $msg; </span></li><li><span>} </span></li><li class="alt"><span>else { </span></li><li><span>echo "Woohoo, OK!"; </span></li><li class="alt"><span>} </span></li><li><span class="tag"><</span><span> ?</span>PHP<span> </span></li><li class="alt"><span>foreach:: </span><span class="attribute">a</span><span> =</span><span class="tag">></span><span> b </span> </li> <li> <span class="tag">?></span><span> </span> </li> </ol>
set_error_handler 処理関数では Parse エラーを処理できないため。この例外はキャッチできません。そのため、エラーを抑制するために @ が使用されます。この場合の問題は、詳細なエラー情報を取得できないことです。 ただし、現時点で必要な機能は、構文が正しいかどうかを確認することだけです。間違っている場合は、テンプレート ファイルを再コンパイルします。構文エラーについては、Web ページを表示するときに自然に表示されます。
PHP で構文エラーをチェックする最良の方法は、放棄された PHP_check_syntax メソッドを PHP に戻すことです。次回はなぜこの機能が削除されたのかを考察していきます。