2012-03-01 4 views
-1

Edit: Fait plus clairvariable PHP ne passant pas par une autre fonction parfois

J'ai un problème avec une disparaissant variables appelle entre la fonction

tout d'abord je commence ici avec $ pid étant un entier tiré d'un JSON chaîne

print "PID".$pid."\n"; 
$a['points'] = Algorithm::getpredictionForPlayer($pid); 

je reçois la sortie « PID12 » qui est la façon dont il devrait être

suivant dans l'algorithme getpredictionForPlayer

static function getpredictionForPlayer($pid) 
{ 

      print "PID2: ".$pid."\n"; 
    $points =0; 

    for ($i = 0; $i < 10; $i++) 
    { 
    print "algorithm: ".$pid."\n"; 
     $points += v4::predictPointsForPlayer($pid); 
    } 

    return intval($points/10); 
} 

De temps en temps je reçois « PID2: 12 », mais le plus souvent tout ce qui imprime est « PID2: » Y at-il une raison la variable disparaîtrait pendant ce temps?

+0

Quelle est la boucle pour? – Kian

+1

Avez-vous répercuté le $ pid dans chaque cas avec un horodatage? Parfois, parfois, cela ne signifie pas que la méthode getpredictionforplayer devrait l'obtenir parfois mais pas d'autres, donc le problème est extérieur. – Hammerstein

+2

Sans pouvoir le reproduire, nous n'avons aucune idée ... –

Répondre

0

Votre variable dans la portée globale est $ pid encore vous passez player_id $ dans la fonction

print "PID".$pid."\n"; 
$a['points'] = Algorithm::getpredictionForPlayer($player_id); 

Vous avez ensuite obtenu un paramètre dans votre méthode statique appelée $ pid

static function getpredictionForPlayer($pid) 

mais ce n'est pas la même chose que la variable dans votre portée globale. En fait, cela prendra la même valeur que le $ player_id que vous transmettez. Si vous voulez que la variable $ pid de votre portée globale existe dans la méthode statique, vous devez la passer au lieu de $ player_id.

btw, vous devriez vous demander si vous avez vraiment besoin d'une méthode statique. En général, ils rendent les choses difficiles à tester et devraient être évitées si possible. Si vous avez un objet player et appelez la méthode getPrediction() à ce sujet?

+0

Désolé, c'était une erreur, je l'ai juste simplifié un peu quand j'ai posté ici, c'est correct en ce moment. –

0

Modifier cette ligne:

$a['points'] = Algorithm::getpredictionForPlayer($player_id); 

à ceci:

$a['points'] = Algorithm::getpredictionForPlayer($pid); 
Questions connexes