【问题标题】:Tell How Function was called告诉函数是如何被调用的
【发布时间】:2011-01-23 21:47:34
【问题描述】:

我已经查看了 debug_backtrace,但到目前为止它并没有做我需要它做的事情。

我需要知道我正在调用的函数是“调用”还是“回显”。像这样:

function hello() {
    //blah blah
}

echo hello(); //echo-ed
hello(); //'called'

但是如果函数被“调用”而不是“回声”,则该函数会做不同的事情。

我该怎么做?

【问题讨论】:

  • 完全不确定这是否可以完成,因为echo 不是一个函数。你能展示不同的回溯吗?...但是如果你想构建一个函数来检测它是否被回显,我会马上停下来。回溯很昂贵 - 这应该以不同的方式解决
  • 您应该接受一些问题的答案 :)

标签: php debugging function backtrace


【解决方案1】:

我很确定这是不可能的。这不起作用的原因是“echo”或任何其他运算符、函数或变量赋值使用了您调用的函数的返回值。因此,如果您有以下情况:

echo function1();

发生的情况是 function1 被执行,返回值被传递给 echo。因此,function1 不可能知道它的返回值将被“回显”,因为到那时,function1() 已经被调用并完成了执行。

【讨论】:

  • 我也很确定这不仅不可能,而且违反所有常识。一个函数不应该知道或关心它被调用的上下文。函数需要关心的只是它的参数,以及它的内部作用域。
【解决方案2】:

没有有效的处理方法

更新: 没有办法处理它:)

【讨论】:

  • 如果您没有答案,请不要发布。
  • 这就是答案?!这是不可能的。
  • 字数有点少,但还算公平:) +1
  • 嗯,实际上答案是错误的,因为它说没有“有效”的方式,但是没有,有效的或其他的。
  • 要使其成为一个好的答案,您应该提供证明而不仅仅是陈述;-)
【解决方案3】:

两个例子帮助你理解。

function hello(){
  return "Hello!";
}
echo hello(); // prints Hello!


function hello(){
  echo "Hello!";
}
hello(); // prints Hello!

【讨论】:

    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多