Anzahl der Objekte
Hallo zusammen,
ich arbeite mit PHP sehr objektorientiert und möchte gerne wissen, wie
viele Instanzen aller Klassen während der Laufzeit angelegt worden
sind.,
Gibt es da eine Möglichkeit?
Am idealsten wär' natürlich ein assoc array in der Form ( Klassenname
=3D> Anzahl Instanzen)
$classInstances['User'] =3D> 1,
$classInstances['TemplateEngine'] =3D> 1,
$classInstances['TableCells'] =3D> 100
Danke, Ciao
Re: Anzahl der Objekte
Karsten Jung wrote:
> Hallo zusammen,
>
> ich arbeite mit PHP sehr objektorientiert und möchte gerne wissen, wie
> viele Instanzen aller Klassen während der Laufzeit angelegt worden
> sind.,
>
> Gibt es da eine Möglichkeit?
>
> Am idealsten wär' natürlich ein assoc array in der Form ( Klassenname
> => Anzahl Instanzen)
>
> $classInstances['User'] => 1,
> $classInstances['TemplateEngine'] => 1,
> $classInstances['TableCells'] => 100
>
> Danke, Ciao
Nö, nicht das ich wüßte. Wozu braucht man sowas? Zähl halt mit ;-)
Christian
Re: Anzahl der Objekte
Karsten Jung schrieb:
> ich arbeite mit PHP sehr objektorientiert und möchte gerne wissen, wie
> viele Instanzen aller Klassen während der Laufzeit angelegt worden
> sind.
Ob es was Fertiges dazu gibt, kann ich nicht sagen. OO unter PHP ist für
mich noch ziemlich neu.
Andererseits lässt sich so etwas mit einem statischen Zähler, der im
Konstruktur inkrementiert und im Destruktur dekrementiert wird, recht
einfach selber bauen.
Gruß. Claus
Re: Anzahl der Objekte
Karsten Jung schrieb:
> ich arbeite mit PHP sehr objektorientiert und möchte gerne wissen, wie
> viele Instanzen aller Klassen während der Laufzeit angelegt worden
> sind.,
>
> Gibt es da eine Möglichkeit?
>
> Am idealsten wär' natürlich ein assoc array in der Form ( Klassenname
> => Anzahl Instanzen)
>
> $classInstances['User'] => 1,
> $classInstances['TemplateEngine'] => 1,
> $classInstances['TableCells'] => 100
Nur so als Idee, falls es nichts besseres gibt:
Man definiert eine Basisklasse, welche direkt oder indirekt von jeder
Klasse vererbt wird und definiert darin eine statische Variable, die die
Referenzen zählt (in etwa das Prinzip der Klasse "Object" aus Java,
falls bekannt).
Beispiel:
abstract class Object
{
private static $reference = array();
protected function __construct()
{
$classname = get_class($this);
if(isset(self::$reference[$classname]))
{
++self::$reference[$classname];
} else
{
self::$reference[$classname] = 1;
}
}
public static function getCounter()
{
return self::$reference;
}
}
Jede Klasse, die du definierst und die nicht von einer anderen Klasse
erbt, muss dann von dieser Klasse erben.
Beispiel:
class A extends Object
{
public function __construct()
{
parent::__construct();
}
}
class B extends Object
{
public function __construct()
{
parent::__construct();
}
}
Sobald dann neue Instanzen der Klassen angelegt werden, wird der Counter
hochgezählt und kann dann abgerufen werden.
Beispiel:
$a = new A();
$b = new B();
$a = new A();
print_r(Object::getCounter());
Ausgabe:
Array ( [A] => 2 [B] => 1 )
Der Aufwand dafür ist recht hoch, daher wäre das nur eine Notlösung,
falls es nichts besseres gibt und du es unbedingt benötigst.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: Anzahl der Objekte
Claus Reibenstein schrieb:
> Konstruktur inkrementiert und im Destruktur dekrementiert wird, recht
¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯
Brain error, rebooting ...
Soll natürlich ...strukt_o_r heißen.
Gruß. Claus
OT: gleiche Lösung was: Anzahl der Objekte
Christoph Herrmann schrieb:
> Nur so als Idee, falls es nichts besseres gibt:
Hübsch, fast identisch zu meinem Post ;-)
Re: Anzahl der Objekte
Karsten Jung schrieb:
> Hallo zusammen,
>
> ich arbeite mit PHP sehr objektorientiert und möchte gerne wissen, wie
> viele Instanzen aller Klassen während der Laufzeit angelegt worden
> sind.,
>
> Gibt es da eine Möglichkeit?
>
> Am idealsten wär' natürlich ein assoc array in der Form ( Klassenname
> => Anzahl Instanzen)
....
class CountAll{
private static $instances=array();
private static $allCount=0;
private function __construct( ) {}
public static addMe($class){
if ( array_key_exists( $class, self::$instances ) ) {
self::$instances[ $class ]++;
}else{
self::$instances[ $class ]=1;
}
self::$allCount++;
if (array_ha)
}
public static function getInstantCount( $class=null ) {
if (is_null($class)) return self::$allCount;
return self::$instances[ $class ];
}
}
abstract class Foo{
public function __construct( ) {
CountAll::addMe( get_class ($this) );
}
}
class MyBar extends Foo{
public function __construct( ) {
parent::__construct( );
}
}
Oder so was ähnliches.
Re: OT: gleiche Lösung was: Anzahl der Objekte
Harald Stowasser schrieb:
> Hübsch, fast identisch zu meinem Post ;-)
Die Lösung liegt halt nahe was statisches im Konstruktor mitzählen zu
lassen ^^.
Ist aber Geschmackssache, was man nimmt. Bei dir hat man weniger
Abhängigkeiten (da keine Vererbung notwendig), bei mir muss man weniger
Klassen ändern, da Klassen, die bereits erben indirekt auch den Counter
mitbekommen.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: OT: gleiche Lösung was: Anzahl der Objekte
On 18 Sep., 10:15, Christoph Herrmann <herrm... [at] dragonprojects.de>
wrote:
> Harald Stowasser schrieb:
>
> > Hübsch, fast identisch zu meinem Post ;-)
>
> Die Lösung liegt halt nahe was statisches im Konstruktor mitzählen zu
> lassen ^^.
>
> Ist aber Geschmackssache, was man nimmt. Bei dir hat man weniger
> Abhängigkeiten (da keine Vererbung notwendig), bei mir muss man weniger
> Klassen ändern, da Klassen, die bereits erben indirekt auch den Counter
> mitbekommen.
>
> --
> Mit freundlichen Grüßen,
> Christoph Herrmann
>
> http://dragonprojects.de/
Hallo zusammen,
dass so etwas mit einer allgemeinen Basis-Klasse möglich ist, ist mir
klar, mir ging es darum, ob php selber eine Funktion o.=C4.
bereitstellt.
Man kann ja auch den aktuellen Speicherverbrauch auswerten...
Danke