Если ваш код javascript + PHP, то текущий номер строки PHP доступен в javascript в виде литеральной константы, потому что он доступен в PHP как <?= __LINE__ ?>
(очевидно, если у вас включены короткие теги PHP).
Так, например, в javascript вы можете сказать:
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
...lottsa 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>
...lottsa HTML & 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.
(Строка метапортпорта отключает «усиление шрифтов» в Android Chrome в соответствии с этим стековым потоком вопросов и ответов: Chrome на Android изменяет размер шрифта . Считайте, что это шаблон, который необходим каждой веб-странице.)
Следующая строка просто для подтверждения того, что я не ошибся. При просмотре в отладчике браузера или по щелчку правой кнопкой мыши / сохранить веб-страницу он становится комментарием HTML, который показывает правильное имя исходного файла и номер строки:
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->
становится:
<!-- *** this is line 1234 of my_file.php *** -->
Теперь, где бы я ни увидел номер строки, будь то в сообщении об ошибке или в отладчике javascript, это правильно. Номера строк PHP и номера строк JavaScript всегда согласованы и идентичны.