有没有办法找出一个类在php中实例化了多少次?

时间:2010-04-27 22:41:00

标签: php oop

我目前正在使用这种方法:

class Foo {
    private static $num_instances = 0;

    function __construct() {
        self::$num_instances++;
    }
}

这似乎有效,但我想知道是否有内置方式......

4 个答案:

答案 0 :(得分:0)

如果有一个我会感到惊讶。
在我看来,如果总是计算创建实例的数量,那将是一个开销。

答案 1 :(得分:0)

您可以使用xdebug使用execution trace

答案 2 :(得分:0)

您始终可以检查$GLOBALS并计算班级实例化的数量。

它不会很漂亮,我更愿意使用静态属性。

答案 3 :(得分:0)

一种解决方法可能是计算$GLOBALS中的实例(由Alix建议):

function count_instances( $class_name ) {
    $i = 0;
    foreach ( $GLOBALS as $key => $global ) {
        if ( 'global' === $key ) continue;
        if ( 'object' === gettype($global) ) {
            if ( $class_name === get_class($global) ) $i++;
        }
    }
    return $i;
}

但是请注意,这将不包括未存储在变量中而实例化的类。例如,它将$var = new className();的实例添加到$GLOBALS而不是简单地添加new className();(只是单独调用而不进行封装)。