我知道一种向类添加静态计数器以计算该类的实例数的模式
class Vehicle
{
private static $_count=0;
public static function getCount() {
return self::$_count;
}
public function __construct()
{
self::$_count++;
}
}
[我想做的是将几个子类添加到Vehicle中,并独立地计算它们的实例
class Bike extends Vehicle
{
...
}
class Car extends Vehicle
{
...
}
因此调用Bike::getCount()
和Car::getCount()
将分别获得自行车和汽车的数量的计数
如果没有这可能吗?>
我知道一种向类添加静态计数器以计算该类类Vehicle的实例数量的模式{private static $ _count = 0;公共静态函数getCount(){...
您可以在父类中保留一个计数数组,而不仅仅是使用static:class
进行索引的单个整数。与self::
不同,它总是引用当前实例的类名。
class Vehicle
{
private static $counts = [];
public static function getCount()
{
return self::$counts[static::class];
}
public function __construct()
{
// Using a reference here to avoid undefined-index notices
$target =& self::$counts[static::class];
$target++;
}
}
class Bike extends Vehicle {}
new Bike;
var_dump(Bike::getCount());
// int(1)
很大程度上取决于您在何处定义计数以及如何使用它。如果基类中有1个计数,则只有1个计数。如果每个类别都有一个计数,那么您需要知道如何访问正确的值。讨论使用self
或static
更多What is the difference between self::$bar and static::$bar in PHP?