php查找实例化类的位置

时间:2011-07-07 16:11:17

标签: php class where instantiation

7 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

答案 2 :(得分:1)

答案 3 :(得分:1)

你可以让这个班级成为单身人士。然后更新调用类的任何位置以使用单例模式。您还可以使__construct()为private或protected,以便必须使用instance()方法对其进行实例化。这意味着该课程只被召唤一次。

然后,为了让您高枕无忧,找出多次调用它的位置,您可以使用instance()方法使用debug_backtrace打印出调试信息。

答案 4 :(得分:0)

答案 5 :(得分:0)

为了分析PHP脚本,我使用xdebug扩展名。这与KCachegrindWinCacheGrind一起将允许您查看哪些类/函数正在调用相关类。

答案 6 :(得分:0)

以下代码段基于debug_backtrace()的使用情况。

在没有参数和选项的情况下获取回溯,并限制为3个数组项;那么"班" name从数组的第二个元素返回。

<强> Demo

代码:

<?php

class MyClass
{
    // find out where $myClass->exec() was called
    static function getInstantiatingClass()
    {   
        return debug_backtrace(2, 3)[2]['class'];
    }

    function exec()
    {
        echo __METHOD__ . ' was called from Class ' . self::getInstantiatingClass();
    }
}

class Demo
{
    function test()
    {
        $myClass = new MyClass;
        $myClass->exec();
    }
}

$demo = new Demo;
$demo->test();

结果:

MyClass::exec was called from Class Demo