Деструктор. Применение спецсимволов.
Primary tabs
//***********Деструктор********************** Котеров 432 // Явное освобождение ресурсов // Класс, упрощающий ведение разного рода журналов class FileLogger0 { public $f; // открытый файл public $name; // имя журнала public $lines = []; // накапливаемые строки // Создает новый файл журнала или открывает дозапись в конец существующего. Параметр $name - логическое имя журнала. public function __construct($name, $fname) { $this->name = $name; $this->f = fopen($fname, "a+"); // $f = fopen('counter.txt', 'r'); $fname - имя файла. http://www.php.su/articles/?cat=fs&page=005. a+ режим файла, где возможна и чтение и запись } // Добавляет в журнал одну строку. Она не попадает в файл сразу же, а накапливается в буфере - до самого закрытия (close()). public function log($str) { // Каждая строка предваряется текущей датой и именем журнала $prefix = "[".date("Y-m-d_h:i:s ")."{$this->name}]"; $str = preg_replace('/^/m', $prefix, rtrim($str)); // https://www.php.net/manual/ru/function.p... , preg_replace (a,b,c)— Выполняет поиск и замену по регулярному выражению. Удаляем из c , a и записываем с b // '/^/m' is called "carriage return" (возврат каретки) // ^ - отрицание, то есть все символы кроме возрата каретки // \ - символ экранирования. // регулярные выражения: http://www.php.su/lessons/?lesson_17 // https://www.php.net/manual/ru/function.r..., rtrim — Удаляет пробелы (или другие символы) из конца строки, но можно указать конкретно, что удалять // Сохраняем строку. $this->lines[] = $str."\n"; } // Закрывает файл журнала. Должна ОБЯЗАТЕЛЬНО вызываться в конце работы с объектом! public function close() { // Вначале выводим все накопленные данные // fputs — Псевдоним fwrite(), а это запись в файл. //join — алиас (псевдоним) implode() -объединяет элементы массива в строку //$arr=array('I', 'love', 'you'); //echo join(' ', $arr); // Выведет «I love you» fputs($this->f, join("", $this->lines)); // Затем закрываем файл fclose($this->f); } } //require_once "File/Logger0.php"; // Создаем в цикле много объектов for ($n = 0; $n < 10; $n++) { $logger = new FileLogger0 ("test$n", "testy.log"); // в кавычках обычно пишется текст? // вызываем метод log $logger->log("Hello!"); // Представим, что мы случайно забыли вызвать close() // $logger->close(); // если включить метод, то выведется Hello! столько раз сколько в for // в результате выполнения программы файл с именем test.log будет пустым }
1)
$str = preg_replace('/^/m', $prefix, rtrim($str));
- как работает функция?
2) Что такое алиас функции ?
3) Объясните смысл выражения '/^/m' ?
- Log in to post comments
- 949 reads