2017-02-17 104 views
0

我想生成一个日志文件。为此我创建了一个名为日志与方法称为写静态类:PHP - 获取类,其中调用方法

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

在这个功能我想知道从哪个类中的方法写入(自动)呼吁:

log::write("Testinformation"); 

我已经尝试过: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...'); 
    } 
}