4 Stimmen

Berechnung der Anzahl der Funktionsaufrufe in derselben Funktion

Wie kann man in php die Gesamtzahl der Funktionsaufrufe berechnen (bestimmen), aber das Ergebnis muss in der gleichen Funktion sein, für die ich diese Zahl berechne.

Beispiel: Die Funktion test() wird 100 Mal aufgerufen (diese Zahl ist variabel und ich kenne sie nicht von Anfang an). Ich möchte diese Zahl im Block der Funktion finden

test();

function test(){

$no_calls =....
echo $no_calls;  

}

Ich möchte, dass die Meldung von echo nur einmal und nicht bei jedem Aufruf der Funktion angezeigt wird.

12voto

hair raisin Punkte 2578

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.

3voto

Abdullah Punkte 742
    <?php
        test();
        test();
        test();
        test();

        $NoOfCalls=0;
        function test(){
         global $NoOfCalls;
         echo ++$NoOfCalls;

        }

2voto

Marc B Punkte 347897
function test() {
   static $calls = 0;
   $calls++;
   echo "this function has been called $calls times";
}

test(); // 1 times
test(); // 2 times
test(); // 3 times

Wenn Sie das brauchen calls Wert außerhalb der Funktion verfügbar sein soll, müssen Sie ihn entweder aus der Funktion zurückgeben ( return $calls oder weisen Sie sie irgendwo einer globalen Variablen zu.

2voto

alghimo Punkte 2899

Das sollte helfen:

function test() {
   static $count = 0;
   $count++;
   ...
}

0voto

Edgars Punkte 54

Sie können eine globale Variable erstellen und sie in der Funktion inkrementieren. Und wenn Sie die Gesamtzahl der Aufrufe überprüfen, können Sie diese Variable verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X