Написание переменных в 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
- 2261 reads
fgh
Wed, 07/01/2020 - 16:22
Permalink
Ответ
Рассмотрим пример:
<?php function a_test($a) { $t=debug_backtrace(); echo "<BR>"; // var_dump($t); echo $t[0]["file"]; } a_test(2); ?>echo $t[0]["file"] выведет абсолютный путь расположения скрипта относительно корневого диска:
C:\Users\....\q.php
Вывод: debug_backtrace() это двумерный ассоциативный массив, а значит переменная stack имеет тот же тип.