Hai Tom,
Damit meinte ich, dass die Klasse auf diese Weise nicht zweimal nacheinander, also erzeugen, zerstören, erzeugen ... benutzt werden kann, weil die Static-Variable auch nach dem Tod der Klasse erhalten bleibt. Die muss, soll die nochmalige Verwendung im selben Script erlaubt sein, dediziert aufgeräumt werden.
Wozu aufraeumen? Ich binde eine Klasse doch gerade dafuer ein, dass mir a) in meinem Scope die entsprechenden Static-Variablen/-Methoden zu Verfuegung stehen - eben ohne an eine Instanz gebunden zu sein(1) - und b) ich von verschiedenen Stellen/Klassen aus instanz-unabhaengige Variablen/Methoden teilen kann(2).
Moechte man erreichen, dass eine Variable beim Zerstoeren der Klasse mit verworfen wird - was ja in der Praxis der Normalfall ist - dann deklariert man sie als Member-Variable.
MfG,
Sympatisant
(1) "Declaring class members or methods as static makes them accessible without needing an instantiation of the class" more
(2) Simples Beispiel:
<?php
class Counter
{
private static $start_time;
private static $stop_time;
public static function Start()
{
self::$start_time = time();
}
public static function Stop()
{
self::$stop_time = time();
}
public static function GetSeconds()
{
return round(self::$stop_time - self::$start_time,2);
}
private static function GetMicrotime()
{
list($msec, $sec) = explode(" ",microtime());
return ($msec + $sec);
}
}
class MyImpl1
{
public function __construct()
{
Counter::Start();
}
}
class MyImpl2
{
public function __construct()
{
Counter::Stop();
}
}
class MyImpl3
{
public function __construct()
{
echo 'Execution Time: '.Counter::GetSeconds();
}
}
new MyImpl1; // Starts the Counter
sleep(2); // Dummy
new MyImpl2; // Ends the Counter
new MyImpl3; // Displays Time
?>
"If the future isn't bright, at least it is colorful"