Деструктор. Применение спецсимволов.



//***********Деструктор********************** Котеров 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' ?