我目前正在使用这种方法:
class Foo {
private static $num_instances = 0;
function __construct() {
self::$num_instances++;
}
}
这似乎有效,但我想知道是否有内置方式......
答案 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();
(只是单独调用而不进行封装)。