PHP-如何知道魔术方法__call()从何处调用

时间:2018-09-24 13:56:34

标签: php

基本上,如果类-CMIIW中不存在任何方法,则将调用魔术方法__call()

例如,我有这样的基础Controller

class Controller
{
    public function __call($method, $args)
    {
        //echo error       
    }

    public function foo()
    {
        echo "foo";
    }
}

AuthController这样扩展了基础Controller

class AuthController extends Controller
{
    public function create()
    {
        return $this->bar();
    }
}

我的问题是我怎么知道它从哪里来?它用于调试目的。我所知道的只是魔法常数__LINE__

1 个答案:

答案 0 :(得分:1)

也许您正在使用get_called_class这样的功能:

public function __call($method, $args)
{
    var_dump(get_called_class());
}

将返回:string(14) "AuthController"

完整代码如下:

<?php

namespace Foo;

class Controller
{
    public function __call($method, $args)
    {
        var_dump(get_called_class());
    }

    public function foo()
    {
        echo "foo";
    }
}

namespace Bar;

class AuthController extends \Foo\Controller
{
    public function create()
    {
        return $this->bar();
    }
}

$c = new \Bar\AuthController();
$c->create();

请检查here