如何在不引入php中的非类成员变量的情况下跟踪给定类的现有对象数?

sur*_*rkk 1 php tags static constructor class

我得到一些解决方案,请帮我找到正确的解决方案.

- >在默认构造函数中添加成员变量增量,在析构函数中减少.

- >添加在每个构造函数中递增的局部变量,并在析构函数中递减.

- >添加静态成员变量,该变量在每个构造函数中递增并在析构函数中递减.

- >无法完成,因为对象的创建是通过"new"动态完成的.

这些是我的四点请选择我最好的.

irc*_*ell 5

使用静态成员变量:

class foo {
    protected static $instances = 0;

    public function __construct() {
        self::$instances++;
    }

    public function __destruct() {
        self::$instances--;
    }
}
Run Code Online (Sandbox Code Playgroud)

但请记住,您可以创建新实例而无需点击构造函数(即via clone,__set_state()(由其使用var_export)和unserialize)...所以您需要添加:

public function __clone() {
    self::$instances++;
}

public function __wakeup() {
    self::$instances++;
}

public static function __set_state($data) {
    $obj = new self();
    foreach ($data as $key => $value) {
        $obj->$key = $value;
    }
    return $value;
}
Run Code Online (Sandbox Code Playgroud)