Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Объясните работу $stack = debug_backtrace();
- $file = basename($stack[$level]['file']);
- $line = $stack[$level]['line'];
- $this->logger->log("[at $file line $line] $s");
- }
- // Оставляем на месте старый метод log()
- public function log($s) { return $this->logger->log($s); }
- // И такие методы-посредники мы должны создать ДЛЯ КАЖДОГО
- // метода из FileLogger
- }
- Листинг 23.1. Базовый класс. Файл File/Logger.php
- <?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));
- $this->lines[] = $str."\n";
- }
- }
- ?>
- Листинг 23.2. "Ручное" наследование. Файл File/Logger/Debug0.php
- <?php ## "Ручная" реализация наследования
- // Вначале подключаем "базовый" класс
- require_once "File/Logger.php";
- // Класс, добавляющий в FileLogger новую функциональность
- class FileLoggerDebug0
- {
- // Объект "базового" класса FileLogger
- private $logger;
- // Конструктор нового класса. Создает объект FileLogger.
- 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");
- }
- // Оставляем на месте старый метод log()
- public function log($s) { return $this->logger->log($s); }
- // И такие методы-посредники мы должны создать ДЛЯ КАЖДОГО
- // метода из FileLogger
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment