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.

0voto

Znarkus Punkte 22226

Schlampiger Code, aber er sollte verständlich genug sein. Er verwendet die __destruct des Objekts, um die Zusammenfassung nur einmal zu drucken. Außerdem verwendet es debug_backtrace um automatisch zu erkennen, welche Funktion sie aufruft. Dies funktioniert auch, wenn Sie mehrere Funktionen aufrufen (wie test , test2 , some_random_function ).

<?php

class Counter {

    private $_count = array();

    public function count_call()
    {
        list(, $prev) = debug_backtrace();
        $this->_count[$prev['function']] = isset($this->_count[$prev['function']])
            ? $this->_count[$prev['function']] + 1
            : 1;
    }

    public function __destruct(){
        echo '<h2>Calls per function:</h2>';
        echo '<pre>';
        var_dump($this->_count);
        echo '</pre>';
    }
}

$counter = new Counter();

function test() {
    global $counter;
    $counter->count_call();
    echo 'called test<br />';
}

$rand = rand(5, 10);
echo "calls to be made: {$rand}<br />";
for ($i = 0; $i < $rand; $i++) {
    test();
}

0voto

f b Punkte 115

Während ich nach neuen Funktionen suchte, um einige Funktionsaufrufe zu verarbeiten, weiß ich, dass die xhprof Erweiterungen diese Dinge und vieles mehr sammeln können, was sehr interessant sein kann. ohne Implementierung von Debug-Code

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