Деструктор. Применение спецсимволов.
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.preg-replace.php , 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.rtrim.php, 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
- 1422 reads