PHP提供函数get_class()
,如果在类上下文中调用它,则不需要参数。
我想编写一个类似的函数,能够检索调用对象而不显式传递它。我尝试使用debug_backtrace()
,但未设置索引object
:
function outer_function() {
var_dump(debug_backtrace());
}
class ExampleObject {
function __construct() {
outer_function();
}
}
new ExampleObject();
请注意,从构造函数调用函数是否相关;如果在构造函数中调用它,get_class()
也可以工作。
答案 0 :(得分:1)
您可以尝试以下操作:
function get_caller(): ?object
{
foreach (debug_backtrace() as $call) {
if (isset($call['object'])) {
return $call['object'];
}
}
return null;
}
这是the demo。
答案 1 :(得分:0)
像这样的东西
public function trace($offset = 0)
{
$trace = debug_backtrace(false);
foreach ($trace as $t) {
// print_r($t);
// print_r($offset);
if ($t['file'] != __FILE__) {
break;
}
++$offset;
}
$arr = array_slice($trace, ($offset - count($trace)));
return $arr;
}
这是我写的调试包,
https://github.com/ArtisticPhoenix/Debug
或者你可以用作曲家获得它
evo/debug
这部分只返回被调用的背面痕迹。
只要在同一个文件中调用no,就可以正常工作。