Правильный ответ: полностью ОК . Алан указывает на не элегантность PHP, поэтому я не буду повторять его слова. Причина (не бойтесь) использовать debug_backtrace в коде времени выполнения состоит в том, что PHP в основном является языком без контекста. Каждая функция не знает и не может знать «намерение» вызывающего, не используя магические имена функций (например, в классе - например, __toString ()) с приведением типов. Давайте рассмотрим случай, когда у вас есть класс, в котором (в методе) вы хотите предоставить доступ к свойствам вызывающего (внешнего) класса. Это действительно грязно и склонно к ошибкам, которые можно передавать ($ this) через API функции. (Особенно, если вы хотите использовать array_map или call_user_func_array.)
, например
<?
class a {
public $v = 'xyz';
function __construct($x,$y)
{
$b = new b();
}
}
class b {
function __construct()
{
$start = microtime();
$x = debug_backtrace();
$end = microtime();
echo ($end-$start) . "\n";
print_r($x);
$obj = $x[1]['object'];
print_r($obj);
}
}
$a = new a(1,2);
?>
debug_backtrace предоставит вам доступ к контексту класса a в __construct of b. Теперь вы можете передавать некоторые переменные состояния из текущего класса, не передавая $ this, не пытаясь угадать его по именам классов или запутав, поместив его в глобальные переменные.
Для тех, кто интересуется временем, микротайм был 2.7E-5. Достаточно быстро. Только не кладите это на некоторое время (1).