Ein verwenden statisch Variable, etwa so
function test(){
static $no_calls = 0;
...
++$no_calls;
}
$no_calls behält seinen Wert zwischen den Aufrufen
Als Antwort auf Ihre Bearbeitung könnten Sie etwa so vorgehen:
function test() {
static $no_calls = 0;
++$no_calls;
...
return $no_calls;
}
test();
test();
test();
$final = test();
echo $final; // will be 4
Ok, versuchen wir es ein drittes Mal:
function test($last_time = false) {
static $no_calls = 0;
++$no_calls;
...
if($last_time)
{
echo $no_calls;
}
}
test();
test();
test();
test(true); // will echo 4
OK, versuchen wir das noch einmal:
class Test {
private $no_calls;
function test()
{
...
++$this->no_calls;
}
function __destruct()
{
echo $this->no_calls;
}
}
$test = new Test();
$test->test();
$test->test();
$test->test();
$test->test();
//when $test falls out of scope, 4 will be echoed.
Wir müssen also auf magische Weise die Anzahl der Funktionsaufrufe widerspiegeln: nur einmal, innerhalb der Funktion, ohne Verwendung von Klassen, y ohne der Funktion mitzuteilen, dass dies der letzte Aufruf ist. Halten Sie Ihre Hüte fest (Warnung, ich empfehle nicht, diesen Code aus vielen Gründen zu verwenden (aber Sie lassen mir keine Wahl), und es wird NICHT funktionieren, wenn es zwischen den Funktionsaufrufen eine Ausgabe geben soll, auch nicht durch die Funktion selbst):
function test() {
static $no_calls = 1;
if($no_calls == 1)
{
ob_start();
}
else
{
++$no_calls;
ob_clean();
}
echo $no_calls;
}
In diesem Fall wird bei Beendigung des Skripts der noch offene Ausgabepuffer automatisch in den Browser gespült.