2017-07-31 64 views
0

除了debug_backtrace()知道调用我的脚本的类的名称之外,还有其他方法吗?在PHP中获取被调用类的另一种方法

+3

没有,也没有任何充分的理由,为什么你应该需要这个 –

+0

是的,你可以试试'{抛出\异常()}赶上(\ $例外五){$ E-> getTrace( );例如我有一个对象:对象(Opportunity)#3(7){“connection”:protected] => object(Connection)#4(5){}''但是'debug_backtrace()'更快 – ArtisticPhoenix

+0

.....}},我只想从中获得'机会'一词。我可以在没有debug_backtrace()的情况下这样做吗? –

回答

2

如果你只是想要当前的类名,你可以使用get_class(); 如果调用堆栈涉及很多类,并且您想要第一个类,那么您确实必须使用debug_backtrace()。

$className = get_class($this); 
+2

OP希望调用另一个类的类从'另一个'类 – ArtisticPhoenix

+0

Thad做到了。干杯。 –

+2

@ ao-pack - 你应该更好地说出你的问题......只是说。无所谓我的回溯功能依然辉煌..大声笑 – ArtisticPhoenix

2

据我所知,back_trace是最好的方法。这就是说,如果你想获得的是称为脚本类/文件等,你可以使用这个功能

/** 
* get the line this file was called on (+1) 
* @param number $offset 
* @return array 
*/ 
function trace($offset = 0) 
{ 
    $trace = debug_backtrace(false); 
    foreach ($trace as $t) { 
     if ($t['file'] != __FILE__) { 
      break; 
     } 
     ++$offset; 
    } 
    return array_slice($trace, ($offset - count($trace))); 
} 

基本上,你通过回溯迭代,你看当前文件之前的项目。

如果您希望它在调用trace()函数之前的1个位置之前还可以设置$offset

https://github.com/ArtisticPhoenix/Evo/blob/master/Evo/Debug.php

相关问题