БлогNot. PHP: как вывести переменную или массив в консоль браузера вместе с именем?

PHP: как вывести переменную или массив в консоль браузера вместе с именем?

Причём, мы хотим это сделать в "нормальном" виде "$имя = значение", например, для этого кода на PHP

<?php
//переменная-число
$var = 1.218; 
pr($var);
//переменная-строка с кавычками внутри
$var = "'\"coocooo'\""; 
pr($var);
//обычный массив
$arr = [1,2,3]; 
pr($arr);
//ассоциативный массив
$d = array('foo' => 'bar', 'baz' => 'long');
pr($d);
//двумерный массив
$arr2 = array (
 array(1,2,3),
 array(4,5,6)
);
pr($arr2);
//объект класса
class foo {
 public $prop; //приватные свойства наш метод, разумеется, не покажет!
 function __construct ($prop = 0) { 
  $this->prop = (is_numeric($prop) ? $prop : 0);  
 }
 function get() { return $this->prop; }
}
$bar = new foo (10);
pr($bar);
?>

где pr() - недостающая функция, мы хотим увидеть в консоли примерно следующее:

вывод в консоль браузера имени и значения переменной или массива PHP
вывод в консоль браузера имени и значения переменной или массива PHP

Да, в PHP 5.6 и выше есть интерактивный отладчик (только с его длинными именами функций толком ещё никто не работал), можно также пользоваться средствами браузера и т.п., холиваров в инете куча, нет только ответа на наш вопрос.

Вот какую функцию, решающую задачу, я написал:

<?php
function pr ($val){
 $bt   = debug_backtrace();
 $file = file($bt[0]['file']);
 $src  = $file[$bt[0]['line']-1];
 $pat = '#(.*)'.__FUNCTION__.' *?\( *?(.*) *?\)(.*)#i';
 $var  = preg_replace ($pat, '$2', $src);
 echo '<script>console.log("'.trim($var).'='. 
  addslashes(json_encode($val,JSON_UNESCAPED_UNICODE)) .'")</script>'."\n";
}
?>

Функция работает только с кодировкой UTF-8 из-за json_encode.

Если листинг выше сохранить как файл с именем, скажем, pr.php, удобно будет подключать функцию отдельным модулем:

<?php
 require_once('pr.php');

 $a = [
  [ [1,2], [3,4] ],
  [ [5,6], [7,8] ]
 ];
 pr($a);

 $c = 1e3;
 pr($c);

 pr ('coo');
?>

Предполагается, что файлы расположены в одной папке и имеют кодировку Юникода utf-8. Скрипт проверялся в XAMPP с PHP 7.X.

Вывод в консоли для этого примера:

$a=[[[1,2],[3,4]],[[5,6],[7,8]]]
$c=1000
'coo'="coo"

Тем не менее, наша функция не будет печатать, например, переданные ей аргументом строки в двойных кавычках, принимать списки из нескольких аргументов и т.п.

Следует помнить, что в общем случае нужно предпочитать "официальные" инструменты отладки.

Какими комбинациями клавиш вызывается консоль в разных браузерах?
Ctrl+Shift+J	Chrome, Opera
Ctrl+Shift+K	Fiefox
F12		Internet Expolrer, MS Edge

Вывод отладочной информации в консоль удобен прежде всего тем, что ничего не "вываливает" на формируемую браузером страницу. Когда функция станет не нужна, можно просто сделать её пустой:

<?php
function pr ($val) { echo ''; }
?>


теги: программирование php

11.02.2020, 12:12; рейтинг: 1109