Написание переменных в PHP
Primary tabs
Зачем$ stack
пишется с
[$ level]
и
['line']
в квадратных скобочках? Если это просто переменная. 36,37 строчка.
Котеров, 459.
<?php class FileLogger { public $f; public $name; public $lines = []; public $t; public function __construct($name, $fname) { $this->name = $name; $this->f = fopen($fname, "a+"); } public function __destruct() { fputs($this->f, join("", $this->lines)); fclose($this->f); } public function log($str) { $prefix = "[".date("Y-m-d_h:i:s ")."{$this->name}] "; $str = preg_replace('/^/m', $prefix, rtrim($str)); // ^ - начало строки // m - считать строку многострочной /m - символ перехода строки, а ^ отрицание // rtrim - удаляет пробелы с конца строки //preg_replace ( $a, $b, $c) - Если в строке $c есть шаблон $a то заменяем строку $c на $b $this->lines[] = $str."\n"; } } class FileLoggerDebug0 { private $logger; public function __construct($name, $fname) { $this->logger = new FileLogger($name, $fname); } public function debug ($s, $level = 0) { $stack = debug_backtrace(); $file = basename($stack[$level]['file']); $line = $stack[$level]['line']; $this->logger->log("[at $file line $line] $s"); } public function log($s) { return $this->logger->log($s); } } $logger = new FileLoggerDebug0("test", "test.log"); $logger->log("Обычное сообщение"); $logger->debug("Отладочное сообщение");
- Log in to post comments
- 1928 reads
fgh
Wed, 07/01/2020 - 16:22
Permalink
Ответ
Рассмотрим пример:
echo $t[0]["file"] выведет абсолютный путь расположения скрипта относительно корневого диска:
C:\Users\....\q.php
Вывод: debug_backtrace() это двумерный ассоциативный массив, а значит переменная stack имеет тот же тип.