2010-06-23 15 views
-4

J'ai une fonction qui appelle deux autres fonctions:fonctions de fois écho une déclaration

class myClass{ 


    function myFunc(){ 

     for($i=0;$i<500;$i++){ 
      $this->func1(); 
      $this->func2(); 
     } 
    } 

    function func1(){ 
     // Does some stuff 
     // echos statements, and can vary the amount of echoed statements 
     while($something == true) 
      echo "This is from func1, and may echo 0-1000 times"; 
    } 

    function func2(){ 
     // Does some stuff 
     // echos statements, and can vary the amount of echoed statements 
     while($something == true) 
      echo "This is from func2, and may echo 0-1000 times"; 
    } 
} 

Ce que je voudrais faire est de trouver un moyen que je peux obtenir le temps total des fonctions ont echo'd quelque chose et obtenir cette information à afficher dans myFunc(). J'ai écrit une fonction de compte, mais cela n'a pas fonctionné comme je l'avais prévu.

Des suggestions?

+3

Vous auriez dû éditer votre question originale au lieu de la supprimer, d'autant plus que de nombreuses personnes ont pris le temps d'écrire des réponses. – webbiedave

+0

Est-ce que '$ something' change réellement? sinon vous avez une boucle infinie. –

+0

@webbiedave: Je m'excuse, je l'avais supprimé avant de réaliser qu'il y avait eu des réponses. tu es trop rapide apparemment. – kylex

Répondre

4

est ici une façon:

class myClass{ 
    private $count; 

    function myFunc(){ 

     for($i=0;$i<500;$i++){ 
      $this->func1(); 
      $this->func2(); 
     } 
    } 

    function func1(){ 
     // Does some stuff 
     // echos statements, and can vary the amount of echoed statements 
     while($something == true) { 
      $this->count++; 
      echo "This is from func1, and may echo 0-1000 times"; 
     } 
    } 

    function func2(){ 
     // Does some stuff 
     // echos statements, and can vary the amount of echoed statements 
     while($something == true) { 
      $this->count++; 
      echo "This is from func2, and may echo 0-1000 times"; 
     } 
    } 
} 

ou une meilleure façon:

class myClass{ 
    private $count; 

    function myFunc(){ 

     for($i=0;$i<500;$i++){ 
      $this->func1(); 
      $this->func2(); 
     } 
    } 

    function func1(){ 
     // Does some stuff 
     // echos statements, and can vary the amount of echoed statements 
     while($something == true) { 
      echoMe("This is from func1, and may echo 0-1000 times"); 
     } 
    } 

    function func2(){ 
     // Does some stuff 
     // echos statements, and can vary the amount of echoed statements 
     while($something == true) { 
      echoMe("This is from func2, and may echo 0-1000 times"); 
     } 
    } 

    function echoMe($msg) { 
     echo $msg; 
     $this->count++; 
    } 
} 
+3

Vous devez supprimer $ this-> echo ++ 'des deux fonctions. –

+0

merci, c'est ce dont j'avais besoin! – kylex

+0

Felix: Merci, j'ai mis à jour le deuxième exemple. –

0

Pourquoi ne pas avoir les fonctions renvoient le nombre d'écho:

$echoCount = 0; 
while ($something == true) { 
    echo "This is from func1, and may echo 0-1000 times"; 
    $echoCount++; 
} 

return $echoCount; 

Puis, en myFunc, vous pouvez les accumuler:

function myFunc() { 

    $totalEchoes = 0; 
    for ($i=0; $i<500; $i++) { 
     $totalEchoes += $this->func1() + $this->func2(); 
    } 
} 
1
function myFunc(){ 
    $echo_count = 0; 
    for($i=0;$i<500;$i++){ 
     $echo_count += $this->func1(); 
     $echo_count += $this->func2(); 
    } 
    echo $echo_count; 
} 

function func1(){ 
    // Does some stuff 
    // echos statements, and can vary the amount of echoed statements 
    $count = 0; 
    while($something == true){ 
     echo "This is from func1, and may echo 0-1000 times"; 
     $count++; 
    } 
    return $count; 
} 

function func2(){ 
    // Does some stuff 
    // echos statements, and can vary the amount of echoed statements 
    $count = 0; 
    while($something == true){ 
     echo "This is from func2, and may echo 0-1000 times"; 
     $count++; 
    } 
    return $count; 
}