使用php debug_backtrace从调用函数获取参数是错误的吗?

时间:2012-03-27 12:50:49

标签: php debugging

使用此代码从调用(如在父级)函数中获取一些参数是否可以?

我这样做是因为我不能轻易修改现有的代码库(Magento)而不用担心破坏事物。

function my_func() {
    // to get first attribute of caller function
    $caller = debug_backtrace();
    $optionValue = current($caller[1][’args’]);
)
function caller($has, $some, $arguments) {
    // ..
    my_func();
    // ..
}

1 个答案:

答案 0 :(得分:4)

这是可能但非常糟糕的做法。反对的理由:

  • 读者不能轻易遵循程序流程(这称为“spaghetti code”)
  • 与传递参数
  • 相比,它是开销
  • 当一些程序员决定在另一个地方使用这个函数非常方便时,可能会发生奇怪的事情。
  • 当一些程序员开始重构你的代码并改变调用函数的参数顺序时,所讨论的函数(你使用这个“聪明的技巧”)将会大错失败。

你应该做的只是将参数传递给子函数:

function outer ($a, $b, $c) {
    inner($a, $b);
}
function inner($foo, $bar) {   // instead of backtrace magic
    echo $foo+$bar;
}