我目前正在使用这种方法:
class Foo {
private static $num_instances = 0;
function __construct() {
self::$num_instances++;
}
}
这似乎可以正常工作,但我想知道是否有内置的方法...
如果有的话,我会感到惊讶。
在我看来,如果它总是计算创建的实例数量,那么这将是一种开销。
您可以随时检查$GLOBALS
并计算类实例化的数量。
这不是很好看,我更喜欢使用静态属性来完成它。
一种方法是通过计算 $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();
(只有调用本身)。
__destruct()
时你可能需要减少这个数字。 - mauris