phpist

Untitled

Oct 24th, 2019
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.43 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5. Объясните работу $stack = debug_backtrace();
  6. $file = basename($stack[$level]['file']);
  7. $line = $stack[$level]['line'];
  8. $this->logger->log("[at $file line $line] $s");
  9. }
  10. // Оставляем на месте старый метод log()
  11. public function log($s) { return $this->logger->log($s); }
  12. // И такие методы-посредники мы должны создать ДЛЯ КАЖДОГО
  13. // метода из FileLogger
  14. }
  15.  
  16.  
  17.  
  18. Листинг 23.1. Базовый класс. Файл File/Logger.php
  19. <?php ## Базовый класс
  20. class FileLogger
  21. {
  22. public $f;
  23. // открытый файл
  24. public $name;
  25. // имя журнала
  26. public $lines = []; // накапливаемые строки
  27. public $t;
  28. public function __construct($name, $fname)
  29. {
  30. $this->name = $name;
  31. $this->f = fopen($fname, "a+");
  32. }
  33. public function __destruct()
  34. {
  35. fputs($this->f, join("", $this->lines));
  36. fclose($this->f);
  37. }
  38. public function log($str)
  39. {
  40. $prefix = "[".date("Y-m-d_h:i:s ")."{$this->name}] ";
  41. $str = preg_replace('/^/m', $prefix, rtrim($str));
  42. $this->lines[] = $str."\n";
  43. }
  44. }
  45. ?>
  46.  
  47.  
  48. Листинг 23.2. "Ручное" наследование. Файл File/Logger/Debug0.php
  49. <?php ## "Ручная" реализация наследования
  50. // Вначале подключаем "базовый" класс
  51. require_once "File/Logger.php";
  52. // Класс, добавляющий в FileLogger новую функциональность
  53. class FileLoggerDebug0
  54. {
  55. // Объект "базового" класса FileLogger
  56. private $logger;
  57. // Конструктор нового класса. Создает объект FileLogger.
  58. public function __construct($name, $fname)
  59. {
  60. $this->logger = new FileLogger($name, $fname);
  61. // Здесь можно проинициализировать другие свойства текущего
  62. // класса, если они будут
  63. }
  64. // Добавляем новый метод
  65. public function debug($s, $level = 0)
  66. {
  67. $stack = debug_backtrace();
  68. $file = basename($stack[$level]['file']);
  69. $line = $stack[$level]['line'];
  70. $this->logger->log("[at $file line $line] $s");
  71. }
  72. // Оставляем на месте старый метод log()
  73. public function log($s) { return $this->logger->log($s); }
  74. // И такие методы-посредники мы должны создать ДЛЯ КАЖДОГО
  75. // метода из FileLogger
  76. }
  77. ?>
Advertisement
Add Comment
Please, Sign In to add comment