Написание переменных в PHP

Зачем

$ stack

пишется с

[$ level]

и

['line']

в квадратных скобочках? Если это просто переменная. 36,37 строчка.

Котеров, 459.



<?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)); 
    // ^ - начало строки
    // m - считать строку многострочной /m - символ перехода строки, а ^ отрицание     
    // rtrim - удаляет пробелы с конца строки
    //preg_replace ( $a, $b, $c) - Если в строке $c есть шаблон $a то заменяем строку $c на $b
    $this->lines[] = $str."\n";     
  }   
} 
 class FileLoggerDebug0   {        
 private $logger; 
 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");     
 } 
 public function log($s) { 
 return $this->logger->log($s);
}     
 } 
$logger = new FileLoggerDebug0("test", "test.log");  
$logger->log("Обычное сообщение");  
$logger->debug("Отладочное сообщение");
fgh's picture

Рассмотрим пример:

<?php
function a_test($a)
{
  $t=debug_backtrace(); 
  echo "<BR>"; 
  // var_dump($t);
  echo $t[0]["file"];
}
 a_test(2);
?>

echo $t[0]["file"] выведет абсолютный путь расположения скрипта относительно корневого диска:
C:\Users\....\q.php

Вывод: debug_backtrace() это двумерный ассоциативный массив, а значит переменная stack имеет тот же тип.