JavaScript 有一种机制可以确定当前执行语句的行号吗?如果有,它是什么?
<?= __LINE__ ?>
(假设您已启用PHP短标签)。this_php_line_number = <?= __LINE__ ?>;
然而,如果你不小心的话,PHP行号可能会与JavaScript行号不同,因为PHP在浏览器看到它们之前“吃掉”了源代码行。所以问题就变成了确保你的PHP和JavaScript行号是相同的。如果它们不同,那么使用浏览器的JavaScript调试器就会变得更加困难。
你可以通过包含一个PHP语句来确保行号相同,该语句写入所需的正确数量的换行符,以同步服务器端(PHP)和浏览器端(JavaScript)的行号。
这是我的代码:
<!DOCTYPE html>
<html lang="en">
<!-- Copyright 2016, 2017, me and my web site -->
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, user-scalable=yes">
<?php
...lots of PHP stuff here, including all PHP function definitions ...
echo str_repeat("\n",__LINE__-6); # Synchronize PHP and JavaScript line numbers
?>
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->
<title>My web page title</title>
...lots of HTML and JavaScript stuff here...
</body>
</html>
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->
关键是这个 PHP 语句:
echo str_repeat("\n",__LINE__-6);
这段代码会输出足够多的换行符,使得 JavaScript 中的行号与 PHP 中的行号相同。所有的 PHP 函数定义等都在该行之前。
在该行之后,我限制了自己使用不会改变行号的 PHP 代码。
"-6" 是因为我的 PHP 代码从第 8 行开始。如果你的 PHP 代码比我更早开始,那么这个数字就会减少。有些人把他们的 PHP 代码放在最顶部,甚至在 DOCTYPE 之前。
(meta viewport 行禁用了 Android Chrome 的 "字体增强",参见 Stack Overflow Q&A:Chrome on Android resizes font。将其视为每个网页都需要的样板文件。)
以下一行只是为了验证我没有犯错。在浏览器的调试器中查看,或通过右键单击 / 保存网页,它将成为一个 HTML 注释,显示正确的源文件名和行号:
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->
变成:
<!-- *** this is line 1234 of my_file.php *** -->
现在,无论是在错误消息还是 JavaScript 调试器中看到的行号,都是正确的。PHP 行号和 JavaScript 行号始终保持一致并且相同。