2017-02-17 4 views
0

Я хотел бы сгенерировать файл журнала. Therefor Я создал статический класс, называемый лог с помощью метода под названием напиши:PHP - Получение класса, вызвавшего метод

class log { 
public static function write($info) { 
// file writing 
} 
} 

В этой функции я хотел бы знать, из какого класса вызывается метод записи (автоматически):

log::write("Testinformation"); 

I уже пытались: get_called_class - но это дает мне только «журнал» вместо «реального» называемого класса ...

Есть ли способ автоматически получить вызываемый класс?

ответ

0
$offset = 1; 
$backtrace = debug_backtrace(); 
$caller = array(); 
if(isset($backtrace[$offset])) { 
    $backtrace = $backtrace[$offset]; 
    if(isset($backtrace['class'])) { 
     $caller['class'] = $backtrace['class']; 
    } 
    if(isset($backtrace['function'])) { 
     $caller['function'] = $backtrace['function']; 
    } 

} 

Нет у вас есть информация о вызове класса и метода или функции. Вы можете также использовать функцию я написал давно

<?php 
function getCaller($offset = 0) { 
    $baseOffset = 2; 
    $offset += $baseOffset; 
    $backtrace = debug_backtrace(); 
    $caller = array(); 
    if(isset($backtrace[$offset])) { 
     $backtrace = $backtrace[$offset]; 
     if(isset($backtrace['class'])) { 
      $caller['class'] = $backtrace['class']; 
     } 
     if(isset($backtrace['function'])) { 
      $caller['function'] = $backtrace['function']; 
     } 

    } 
    return $caller; 
} 
?> 
+0

Большое спасибо! Это именно то, что мне нужно! – Nilse

0

Вы не можете получить класс, который его вызвал.

использовать что-то вроде:

define("log_tag", "myclass") 

в начале файла, а через остальную часть файла вызова:

log::write(log_tag, "testinformation");` 
0

Я думаю, что было бы проще добавить имя класса при вызове метода:

class Foo 
{ 
    public function bar() 
    { 
     // do something ... 
     log::write(get_called_class().': blablabla...'); 
    } 
}