已创建了多少个类的实例

时间:2016-01-25 19:37:53

标签: php class oop

我想知道内存中有多少个特定类的实例。

class Test
{
   public function testFunction() { return 'Test'; }
}

我创建了一些对象:

$test1 = new Test();
$test2 = new Test();
$test3 = new Test();

如何计算Test个对象的数量?

2 个答案:

答案 0 :(得分:3)

您可以使用类中的静态变量来实现它,您可以通过它的构造函数和析构函数继续更新。方法如下:

class MyClass {
    public static $instanceCount = 0;

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

    function __destruct() {
        self::$instanceCount--;
    }
}

// create 3 instances
$a = new MyClass();
$b = new MyClass();
$c = new MyClass();
echo MyClass::$instanceCount; // outputs: 3

// implicitly lose one instance (destructor is called)
$a = "test";

echo MyClass::$instanceCount; // outputs: 2

答案 1 :(得分:2)

您可以尝试get_defined_vars功能

它返回一个定义了变量的数组,然后你需要逐个循环遍历数组。要获取给定变量的类,可以使用get_class函数。

也许是这样的:

function countVars() {
   $varsDefined = [];

   foreach(get_defined_vars() as $v) {
      $varClass = get_class($v);

      if (!isset($varsDefined[$varClass])) $varsDefined[$varClass] = 0;

      $varsDefined[$varClass]++;
   }

   return $varsDefined;
}

我无法测试代码,因此可能会出现一些错误,但我认为这个想法是存在的:)

希望它有所帮助!