如何获取在PHP中调用函数的对象?

时间:2018-04-07 23:45:25

标签: php function oop object

PHP提供函数get_class(),如果在类上下文中调用它,则不需要参数。

我想编写一个类似的函数,能够检索调用对象而不显式传递它。我尝试使用debug_backtrace(),但未设置索引object

function outer_function() {
    var_dump(debug_backtrace());
}

class ExampleObject {
    function __construct() {
        outer_function();
    }
}

new ExampleObject();

eval on 3v4l.org

请注意,从构造函数调用函数是否相关;如果在构造函数中调用它,get_class()也可以工作。

2 个答案:

答案 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,就可以正常工作。